美文网首页
iOS 六大设计原则

iOS 六大设计原则

作者: Miracle_任 | 来源:发表于2021-03-08 17:47 被阅读0次

    iOS六大设计原则:单一职责原则(Single Responsibility Principle)、开闭原则(Open Close Principle)、里氏替换原则(Liskov Substitution Principle)、接口隔离原则(Interface Segregation Principle)、依赖倒置原则(Dependence Inversion Principle)、迪米特原则(Law Of Demeter)

    单一职责原则

    单一职责,从字面上就能看出,各自有各自的职责,可以这样理解:
    UIView:负责事件的传递、响应
    CALayer:负责视图的显示、动画
    他们各自都有自己的职责
    例如:在开发过程中,我们自定义对象,每个类/对象,只负责一个功能,不要一个对象处理很多逻辑。

    开闭原则

    开闭原则,可以这样理解:
    开:开放出接口供外部使用
    闭:不能修改,想要修改,采用继承的方式
    这样的话,能够保证APP的稳定性及可拓展性
    例如:封装出一个公用类,提供可使用接口。如果不能满足需求,不要直接修改类代码,最好采用继承/组合的方式,来拓展以满足需求。

    里氏替换原则

    理解:父类可被子类无缝替换,而原有所有功能不受任何影响。
    注:可以拓展父类方法,不要复写父类方法
    例:

    //父类
    -(void)carName{
    NSLog(@"小汽车");
    }
    
    //子类
    //正确的
    -(void)carName{
    NSLog(@"小汽车");
    }
    
    -(void)carColor{
    NSLog(@"红色的");
    }
    
    //错误的 影响到了父类原有功能
    -(void)carName{
    NSLog(@"小汽车,红色的");
    }
    

    接口隔离原则

    理解:设计接口时,应当各个功能隔离开,应更具体,更详细。不要拥挤到一起,做很多用不到的功能。
    例:自定义类中,每个功能单独设计接口,不要一个接口中做很多事,有的场景却用不到其中的某件事

    //错误的
    //有时候不需要开空调
    -(void)usedCar{
    NSLog(@"行驶");
    NSLog(@"开空调");
    }
    
    //正确的
    -(void)usedCar{
    NSLog(@"行驶");
    }
    
    -(void)openTheAircondition{
    NSLog(@"开空调");
    }
    

    依赖倒置原则

    理解:抽象不应该依赖于具体实现,实现应依赖于抽象
    例:

    //错误的 这里依赖具体的 Gasoline90、Gasoline93类型
    class Car {
        func refuel(_ gaso: Gasoline90) {
            print("加90号汽油")
        }
        
        func refuel(_ gaso: Gasoline93) {
            print("加93号汽油")
        }
    }
    
    class Gasoline90 {
        
    }
    
    class Gasoline93 {
        
    }
    
    
    //正确的 将Gasoline90、Gasoline93抽象成IGasoline类,然后就不要管具体是啥
    class Car {
        func refuel(_ gaso: IGasoline) {
            print("加\(gaso.name)汽油")
        }
    }
    
    protocol IGasoline {
        var name: String { get }
    }
    
    class Gasoline90: IGasoline {
        var name: String = "90号"
    }
    
    class Gasoline93: IGasoline {
        var name: String = "93号"
    }
    

    迪米特原则

    理解:对象之间互相不要知道太多具体实现,知道的越多耦合性越强,修改一个对象对另一个影响越大。

    //错误的
    //类A
    -(void)isUseCar{
    if([B.person isEqualToString: @"男人"]){
    NSLog(@"开车");
    }else if([B.person isEqualToString: @"女人"]){
    NSLog(@"不开车");
    }
    
    //正确的
    //类A
    -(void)useCar{
    if(B.isUseCar){
    NSLog(@"开车");
    }else{
    NSLog(@"不开车");
    }
    
    //类B
    -(BOOL)isUseCar{
    if([B.person isEqualToString: @"男人"]){
    return YES;
    }else if([B.person isEqualToString: @"女人"]){
    return NO;
    }
    }
    
    /*
    这样设计,后面对B类中的判断条件进行更改,不会影响到A类。
    例如添加判断条件,“是否是小孩”。这样只需更改B类中代码即可。
    从而达到:高内聚、低耦合
    */
    }
    

    相关文章

      网友评论

          本文标题:iOS 六大设计原则

          本文链接:https://www.haomeiwen.com/subject/mjnpqltx.html