设计模式列表

image.png

  • 把名字全记住写纸上
    • 典型用法要想起来
    • 类图要想起来(重要)
  • 程序员实现(等级最低)===>往上升就得了解设计了(designer、developer)
  • 面向对象的设计的感觉(学完设计模式)

面向对象的六大原则

指导思想

  • 可维护性Maintainability
    • 修改功能,需要改动的地方越少,可维护性就越好
    • 禁止牵一发而动全身
  • 可复用性Reusability
    • 代码可以被以后重复使用
    • 写出自己总结的类库
  • 可扩展性Extensibility/Scalability
    • 添加功能而无需修改原来代码
    • 或少量修改
  • 灵活性flexibility/mobility/adaptability
    • 代码接口可以灵活调用
    • 代码接口设计灵活,多暴露几个重载方法出来(重写与重载)

单一职责原则

  • Single Responsibility Principle
  • 一个类别太大,别太累,负责单一的职责
    • Person
    • PersonManager
  • 高内聚,低耦合
    • 该自己负责的就自己负责,不要分给别人
    • 不该自己负责的就不要负责

开闭原则

  • Open-Closed Principle
  • 对扩展开放,对修改关闭
    • 尽量不修改原来代码的情况下进行扩展
  • 抽象化,多态是开闭原则的关键
    • 活用多态
    • 需要替换或添加新功能的时候,扩展子类,往上加就行了,不要修改代码

里氏替换原则

  • Liscov Substitution Principle
  • 所有使用父类的地方,必须能够透明的使用子类对象
  • 子类改了父类的接口或重载了父类的接口,重写了很多接口,改了接口的语义了就违反了里氏替换原则了
  • 使用父类的地方就能使用子类,其他的地方不用变

依赖倒置原则

  • Dependency Inversion Priciple
  • 依赖倒置原则
    • 依赖抽象,而不是具体
    • 面向抽象编程
    • 面向接口编程
    • 因为面向接口编程时里面具体的实现可以随便换,只调用接口中的方法,实现可以随便换

接口隔离原则

  • Interface Segregation Principle
  • 每一个接口应该承担独立的角色,不干不该自己干的事
    • Flyable Runnable 不该合二为一,不该合为FR(其中有fly和run)
    • 避免子类实现不需要实现的方法
    • 需要对客户提供接口的时候,只需要暴露最小的接口
    • 会暴露很多用不着的接口,是对客户的干扰,也容易让客户出错,看上去麻烦(只暴露最小接口,能少一点就少一点)
    • 符合高内聚、低耦合原则

最小知识原则(迪米特法则)

  • Law of Demeter
  • 尽量不要和陌生人说话
  • 一个类对另一个类了解得尽量少
  • 在迪米特法则中,对于一个对象,非陌生人包括以下几类:
    • 当前对象(this)
    • 以参数形式传入到当前对象方法中的对象
    • 当前对象的成员对象
    • 如果当前对象的成员对象是一个集合,那么集合中的元素也都是朋友(互为朋友)
    • 当前对象所创建的对象(内部类???)
  • 尽量不要跟本类扯不上关系的类互相调用
  • 和其他类的耦合度变低,把耦合度降低===>工具类能用
  • 比较好的工具类—->不与其他类产生关系
  • 高内聚低耦合

组合/聚合原则

  • 使用聚合/组合代替继承

总结

  • OCP:总纲,对扩展开放,对修改关闭
  • SRP:类的职责要单一
  • LSP:子类可以透明替换父类
  • DIP:面向接口编程
  • ISP:接口的职责要单一
  • LOD:降低耦合