美文网首页
常用设计原则一(SOLID)

常用设计原则一(SOLID)

作者: supremecsp | 来源:发表于2021-01-03 22:07 被阅读0次

    设计原则本身并不是一个孤岛,各原则间有不少类似的原理和作用,需要理解的是各原则相对应的应用场景与职责

    1, 单一职责原则( Single Responsibility Principle )

    SRP应用于接口,模块,类,讲究的是自身只完成一个职责。

    这个职责的粒度需要在业务的角度上进行划分,例如一个用户类包含以下信息

    若是调用此类的操作都需要返回所有数据信息,则是符合SRP,若是有大部分的类只需要获取用户地址信息,则可以继续拆分成独立的 UserAddress 类,UserInfo 只保留除 Address 之外的其他信息,拆分之后的两个类的职责更加单一。

    2,开闭原则( Open Closed Principle )

    OCP应用于模块、类、方法,讲究的是功能的变化不影响结构本身的稳定性。

    对扩展开放、对修改关闭。修改关闭并非完全不修改,而是通过较少的修改就是达到功能的添加,多种设计模式都是为了实现这个原则,例如:工厂设计模式,策略模式,观察者模式等

    3,里式替换原则( Liskov Substitution Principle )

    LSP应用于类,讲究子类完美继承父类

    子类可以重写父类的方法,但是不能改变父类的原则。例如父类有一个根据id排列的方法。子类重写父类的方法时,就不能把方法改为根据时间来排序。这样的目的是避免“二意性”,提高可读性,使阅读代码的人不会感觉模棱两可,父类一套,子类一套,到底应该读哪种。也蕴含着开闭原则的道理,可以扩展,不要修改

    4, 接口隔离原则( Interface Segregation Principle )

    ISP应用于接口,函数,讲究的是调用者调用的接口,函数不要包含不需要的东西

    ISP与单一职责很相似,都是为了职责单一,粒度小。

    区别在于ISP面向的是调用者,面向的是接口,目的是低耦合;单一职责面向的是自身,面向的是类或接口,目的是高内聚,低耦合;

    5,依赖倒置原则( Dependency Inversion Principle )

    DIP应用于模块,讲究的是调用者与被调用者执行依赖抽象而不依赖具体细节

    低层次模块(被调用者)提供的接口要足够的抽象、通用(基于接口而非实现编程),在设计时需要考虑高层次模块的使用种类和场景。

    明明是高层次模块要使用低层次模块,对低层次模块有依赖性。现在反而低层次模块需要根据高层次模块来设计,出现了「倒置」的显现。

    这样设计好处有两点:

    1. 低层次模块更加通用,适用性更广

    2. 高层次模块没有依赖低层次模块的具体实现,方便低层次模块的替换

    参考:设计模式之美

    相关文章

      网友评论

          本文标题:常用设计原则一(SOLID)

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