面向对象设计原则
原则目的:高内聚,低耦合,隔离变化 依赖倒置原则 Dependence Inversion Principal(DIP) 依赖于抽象(接口),不要依赖具体的实现(类) 针对接口编程 开闭原则 Open-Closed Principal(OCP) 对扩展开放,对修改关闭 类的改动是通过增加代码进行的,而不是修改源代码 单一职责原则 Single Responsibility Principal(SRP) 类的职责单一,对外只提供一种功能 一个类应该仅有一个引起它变化的原因 变化的方向隐含着类的责任 里氏代换原则 Liskov Substitution Principal(LSP) 任何抽象类出现的地方都可以用他的实现类进行替换(多态) 子类必须能够替换它们的基类(IS-A) 继承表达类型抽象。 接口隔离原则 Interface Segregation Principal(ISP) 不应该强迫客户程序依赖他们不用的方法 接口应该小而完备 一个接口应该只提供一种对外功能,不应该把所有操作都封装到一个接口中去 合成复用原则 Composite Reuse Principal(CRP) 对于继承和组合,优先使用组合 类继承通常为 白箱复用,对象组合通常为 黑箱复用 继承在某种程度上破坏了封装性,子类父类耦合度高 而对象组合则只要求被组合的对象具有良好定义的接口,耦合度高 迪米特法则 Law of Demeter(LoD) 一个对象应当对其他对象尽可能少的了解(最小接口原则),从而降低各个对象之间的耦合。例如在一个程序中,各个模块之间相互调用时,通常会提供一个统一的接口来实现。这样其他模块不需要了解另外一个模块的内部实现细节(黑盒原理) 封装变化点,使用封装来创建对象之间的分界层,让设计者可以在分界层的一侧进行修改,而不会对另一侧产生不良的影响,从而实现层次间的松耦合 针对接口编程,而不是针对实现编程 不将变量类型声明为某个特定的具体类,而是声明为某个接口 客户程序无需获知对象的具体类型,只需要知道对象所具有的接口 减少系统中各部分的依赖关系,从而实现 高内聚、松耦合 的类型设计方案