Java设计模式--设计原则

摘要


面向对象设计原则为支持可维护性复用而诞生,这些原则蕴含在很多设计模式中,它们是从许多设计方案中总结出的指导性原则。
六大原则:单一职责原则;里氏代换原则;依赖倒转原则;开闭原则;接口隔离原则;迪米特法则;合成复用原则 (7个?)

单一职责原则(SRP)Single Responsibility Principle


定义
  • 一个类只负责一个功能领域中的相应职责
  • 就一个类而言,应该有且只有一个原因引起它变更。
核心
  • 职责
  • 变化原因
好处
  • 降低类的复杂性,清晰定义职责
  • 复杂度低了,可读性高,可维护性高
  • 变更风险低
使用频率:★★★★☆

里氏代换原则(LSP)Liskov Substitution Principle


定义
  • 任何基类(父类)可以出现的地方, 子类一定可以出现。
核心
  • 父类业务必须原样支持:子类要完整的实现父类的业务
    • 要求子类能扩展父类,但不能变更父类的行为,或者减少父类的行为
    • 如果子类不能完整的做到这点,就断开继承,用依赖、组合、聚合代替
  • 子类可以扩展:子类有自己的扩展行为
重写父类方法时
  • 重写方法时,入参需要放大,并且保证父类的逻辑可用
  • 重写方法时,返回要缩小,不能超过父类的返回值得范围
使用频率:★★★★★

依赖倒转原则(DIP)Dependence Inversion Principle


定义
  • 高层模块不应该依赖低层模块。两个都应该依赖抽象。
  • 抽象不应该依赖细节。细节应该依赖抽象。
核心
  • 实现类不应相互依赖,都应该依赖接口、抽象
  • 抽象类,接口也应该依赖抽象和接口,不能依赖具体实现类
最佳实践
  • 每个类尽量都有接口或抽象类,或者两者都具备
  • 定义变量的表面类型尽量是接口或抽象类
  • 实现类不应该由具体类派生出来 (现实往往做不到)
使用频率:★★★★★

开闭原则(OCP)Open Close Principle


定义
  • 对扩展开放, 对修改关闭。
使用频率:★★★★★

接口隔离原则(ISP)Interface Segregation Principle


定义
  • 使用多个专门的接口,而不使用单一的总接口
  • 即客户端不应该依赖那些它不需要的接口。
核心
  • 接口尽量细化
  • 接口中的方法尽量少
  • 接口高内聚
使用频率:★★☆☆☆

迪米特法则(LoD)Law of Demeter


定义
  • 最小知识原则(LKP)Least Knowledge Principle
  • 一个软件实体应当尽可能少地与其他实体发生相互作用。
使用频率:★★★☆☆

合成复用原则(CRP)Composite Reuse Principle


定义
  • 尽量使用对象组合,而不是继承来达到复用的目的
使用频率:★★★★☆

猜你喜欢

转载自blog.csdn.net/yanbin0830/article/details/88820199