设计模式之六大设计原则

设计模式之六大设计原则
  • 单一职责原则(Single Responsibility Principle - SRP)
    有且仅有一个原因引起类的变更。即一个类只负责一项职责。
    • 类的复杂性降低
    • 可读性提高
    • 可维护性提高
    • 变更引起的风险降低
  • 里氏替换原则(Liskov Substitution Principle - LSP)
    子类可以扩展父类的功能,但不能改变父类原有的功能。
    • 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法
    • 子类中可以增加自己特有的方法
    • 当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松
    • 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比分类更严格
  • 依赖倒置原则(Dependence Inversion Principle)
    高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。核心就是面向接口编程。
    • 低层模块尽量都要有抽象类或者接口,或者两者都有
    • 变量的声明类型尽量是抽象类或接口
    • 使用继承时遵循里氏替换原则
  • 接口隔离原则(Interface Segregation Principle)
    客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。
    • 接口尽量要小。根据接口隔离原则拆分接口时,必须首先满足单一职责原则。
    • 接口要高内聚。提高接口、类、模块的处理能力,减少对外的交互。
    • 定制服务。只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模块提供定制服务,才能建立最小的依赖关系。
    • 接口设计是有限度的。接口的设计粒度越小系统越灵活,这是不争的事实,但这就带来结构的复杂化,开发难度增加,维护性降低,所以一定要适度。 接口和类都尽量使用原子接口或原子类来组装。
      • 原子划分规则:
        • 一个接口只服务于一个子模块或者业务逻辑
        • 通过业务逻辑压缩接口中的public方法
        • 已经被污染了的接口,尽量去修改,若变更的风险较大,则采用适配器模式进行转换处理
        • 了解环境,拒绝盲从。环境不同,接口拆分的标准就不同,深入了解业务逻辑才能更好地设计原子
  • 迪米特法则(Low Of Demeter)
    一个对象应该对其他对象保存最少的了解。迪米特法制也叫最少知道原则(Least Knowledge Principle,简称LKP)。一个类对自己依赖的类知道的越少越好。其实就是实现类的高内聚,低耦合。
    • 只和直接的朋友通信。出现成员变量、方法参数、方法返回值中的类为直接朋友。
    • 朋友间也是有距离的。迪米特法制要求类“小气”一点,尽量不要对外公布太多的public方法和非静态的public变量,尽量内敛,多使用private,package-private,protected等访问权限。
  • 开闭原则(Open Close Principle)
    类、模块和函数应该对扩展开放,对修改关闭。用抽象构建框架,用实现扩展细节。
  • 总结
    • 单一职责原则:实现类要职责单一
    • 里氏替换原则:不要破坏继承体系
    • 依赖倒置原则:面向接口编程
    • 接口隔离原则:设计接口要精简单一
    • 迪米特法制:要降低耦合
    • 开闭原则:对扩展开放,对修改关闭

猜你喜欢

转载自my.oschina.net/u/3163032/blog/1786308