面向对象七大设计原则
面向对象原则综述
一、单一职责
- 我们在设计过程中,经常会面临一个方法里面有很多个不同的方法组成,书写代码时会使代码显得很冗长,因此我们可以将不同的每个方法抽离出来,单独形成一个类,然后通过聚合的方法,在基础方法上添加这个类属性。根据不同的业务,聚合不同的方法,而每个方法又可以单独拿出来使用,并且其只受一个原因使其变化。
二、开闭原则
- 一个实体方法的变化,不应该通过改变代码的方式,而是在不改变自己的情况下,根据业务需要,额外扩展其他的方法,最好的方式就是将几个不同方法抽象出来,这样便于功能的扩展。
三、聚合/组合复用原则
- 在实现功能时,多用组合,少用继承。因为当我们实现一个方法时,如果想增加一个方法,改变父类就会影响所有的子类,破坏了子类的封装。所以为了体现封装的特性,通过聚合多个属性来增加扩展,而不是改变继承的父类。
四、迪米特法则
- 一个类与另一个类的交互,应该做到最少的接触,不让另一个类知道和操作自己所属的类成员,应该降低自己成员的访问权限。但可能会造成大量的小方法。
五、依赖倒置原则
- 高层次的不应该依赖于低层次的模块,他们应该依赖于抽象,否则底层的任何修改都会影响到上层。
- 抽象不依赖于具体实现,具体实现应该依赖于抽象
- 要针对接口编程,不要针对实现编程
六、里氏替换原则
- 任何父类出现的地方,都可以用子类替换。
- 里氏替换是对开闭原则的一个补充,父类方法的改变会影响所有子类,而不一定所有子类都适用,则应该断开父类的继承
七、接口隔离原则
- 一个类不应该继承他不需要的接口,且继承的应该是最小的接口。
- 不应该让开发者接触到他不使用的方法
对ClientA 来说, operationB、operationC 都是不需要的。利用接口隔离原则,将大的接口进行拆分: