本人只是一只普普通通的大三的测试小白,该文章是根据平时上课老师讲的内容所写的
七个常用的面向对象的设计原则
1.单一职责原则(Single Responsibility Principle,SRP)
定义:一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。
单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小
2.开闭原则(Open-Closed Principle,OCP)
定义:软件实体应当对扩展开放,对修改关闭。
开闭原则是面向对象的可复用设计的第一块基石,它是最重要的面向对象设计原则
3.里氏代换原则(Liskov Substitution Principle,LSP)
定义:所有引用基类的地方必须能透明地使用其子类的对象。
里氏代换原则是实现开闭原则的重要方式之一,在运用里氏代换原则时应该将父类设计为抽象类或接口,让子类继承父类或实现父接口,并实现在父类中声明的方法,可以很方便地扩展系统地功能,无须修改原有子类地代码,增加新的功能可以通过增加一个新的子类来实现
4.依赖倒转原则(Dependence Inversion Principle,DIP)
定义:高层模块不应该依赖底层模块,它们都应该依赖对象。抽象不应该依赖于细节,细节应该依赖于抽象。
如果说开闭原则是面向对象设计的目标,那么依赖倒转原则就是面向对象设计的主要实现机制之一,它是系统抽象化的具体实现,简单来说,依赖倒转原则要求针对接口编程,不要针对实现编程
5.接口隔离原则(Interface Segregation Principle,ISP)
定义:客户端不应该依赖那些它不需要的接口。
根据接口隔离原则,当一个接口太大时需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可
6.合成复用原则(Composite Reuse Principle,CRP)
定义:优先使用对象组合,而不是通过继承来达到复用的目的。
合成复用原则又称为组合/聚合复用原则,合成复用原则就是在一个新的对象里通过关联关系(包括组合关系、聚合关系)来使用一些已有的对象,简而言之,在复用时要尽量使用组合/聚合关系(关联关系),少用继承
通过继承来进行复用的主要问题 : 继承复用会破坏系统的封装性,因为继承会将基类的实现细节暴露给子类,由于基类的某些内部细节对子类来说是可见的,所以这种复用又称为"白箱"复用,如果基类发生改变,那么子类的实现也不得不发生改变;从基类继承而来的实现是静态的,不可能在运行时发生改变,没有足够的灵活性;而且继承只能在有限的环境中使用(比如说类没有声明为不能被继承)
7.迪米特法则(Low of Demeter,LoD)
定义:每一个软件单位对其他单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。
迪米特法则又称为最少知识原则,迪米特法则要求一个软件实体应当尽可能少地与其他实体发生相互作用,应用迪米特法则可降低系统的耦合度,使类与类之间保持松散的耦合关系,迪米特法则要求在设计系统时应当尽量减少对象之间的交互
书名:Java设计模式 编著:刘伟 出版社:清华大学出版社