面向对象原则
单一职责(S
ingle Responsibility)
高内聚,一个类只干一件事,低耦合,影响范围小
开闭原则(O
pen-Close)
开放扩展,封闭修改。可以在不修改现有代码的情况下加入新功能,保持原逻辑稳定性,提升代码复用性。
面向接口的编程,使用设计模式比如策略模式,装饰器等等
里氏替换(L
iskov Subtitution)
程序逻辑中使用父类的地方可以透明的替换成子类,子类可以扩展父类,不要改变父类原有行为
- 不覆盖父类非抽象的方法
- 子类可以增加自己的方法
- 子类实现父类抽象时,返回值更严格
- 子类重载父类时,参数更宽泛
接口分离(I
nterface Segregation)
接口要小而专,因为接口中的所有方法必须要实现,大而全的接口会造成类不需要某些方法
依赖倒转(D
ependence Inversion)
针对接口编程,不依赖具体实现
迪米特法则(Law of Demeter)
最少知识原则(Least Knowledge Principle, LKP),对象只暴露简单方法,封装内部复杂逻辑,降低类间耦合,严控访问权限
只和直接朋友交互,不和朋友的朋友间接交互,避免长链式调用
直接朋友的范围
- 当前对象本身
- 方法传入的参数
- 当前对象直接引用的实例变量
- 当前对象创建的对象
- 当前对象所处的集合
缺点:
由于只和直接朋友交互,如果想调用另一模块的方法,那么需要包装出很多用于传递调用的类或方法,一定程度上增加了复杂度,过多的传递降低通信效率
门面模式,调停者模式
组合/聚合复用原则(Composite/Aggregate Reuse Principle CARP)
组合优于继承
- 继承只能单继承扩展性受限
- 父类方法子类不一定全部需要
一分也是爱~
版权声明
This site by Linest is licensed under a Creative Commons BY-NC-ND 4.0 International License.
由Linest创作并维护的博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。