七种最常见的面向对象设计原则的基本概念
1、单一职责原则(Single Responsibility Principle, SRP):
一个类只负责模块中的一个职责,只有这个职责的改变,才是这个类改变唯一的原因。
2、接口隔离原则(Interface Segregation Principle, ISP):
使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。
3、里氏代换原则(Liskov Substitution Principle, LSP):所有引用基类(父类)的地方必须能透明地使用其子类的对象。
4、依赖倒转原则(Dependency Inversion Principle, DIP):抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。
5、开闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。
6、合成复用原则(Composite Reuse Principle, CRP):尽量使用对象组合,而不是继承来达到复用的目的。
7、迪米特法则(Law of Demeter, LoD):一个软件实体应当尽可能少地与其他实体发生相互作用。
迪米特法则就是应该尽量减少对象之间的交互,如果两个对象之间不必彼此直接通信,那么这两个对象就不应当发生任何直接的相互作用,如果其中的一个对象需要调用另一个对象的某一个方法的话,可以通过第三者转发这个调用,如代理模式。
应用在方法上就是一个对象的方法仅能调用以下:
- 这个对象本身。
- 方法的参数。
- 方法内创建的对象。
- 对象的任何直接成员属性。
简单梳理一遍,加深印象,理解后基本上就不会忘记了。
当我们创建一个类之前会想这个类是用来干嘛的,它的职责是什么。承担的职责越多,它被复用的可能性就越小,当其中一个职责变化时,可能会影响其他职责的运作。因此要将这些职责进行分离,将不同的职责封装在不同的类中,即单一职责原则。
同样的当我们创建一个接口时也要考虑此原则,那么接口中的某个方法它的实现类不需要时怎么办呢,应当将一些方法提取成一个新的接口。即接口隔离原则,做为单一职责原则的补充。
一般情况父类的功能都是子类功能的子集,所以在使用父类的地方用子类代替后程序都不应该出现问题。即里氏代换原则。
一个接口有多个实现,可以根据需求来切换不同的实现。因此针对接口编程比针对实现编程更灵活,即依赖倒转原则。
里氏代换原则与依赖倒转原则都是实现开闭原则的基础,即开闭原则是目标,里氏代换原则是基础,依赖倒转原则是手段
复用类时尽量使用对象组合,而不是继承。可以降低类与类之间的耦合度,一个类的变化对其他类造成的影响相对较少。即合成复用原则。
站在系统的角度,一个模块发生修改时,应当尽量少地影响其他模块。即迪米特法则。
网友评论