设计模式的原则
一、单一职责原则(SRP)
概念:就一个类而言,应该仅有一个引起它变化的原因。
二、开放-封闭原则(OCP)
概念:是说软件实体(类、模块、函数等等)应该可以扩展,但是不能修改。
特性:对于扩展时开放的,对于更改是封闭的。
面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。
三、依赖倒转原则
概念:
(1)高层模块不应该依赖底层模块,两个都应该依赖抽象;
(2)抽象不应该依赖细节,细节应该依赖抽象(通俗得讲就是:针对接口编程,不要对实现编程)
在面向过程开发时,为了使得常用代码的复用,一般都会把这些代码写成许多函数的程序库,这样在做新项目时候去调用这些底层的函数就可以了。比如需要访问数据库,就把访问数据库的代码写成函数,每次写新项目的时候就可以去调用这些函数,这就是高层模块依赖低层模块。这样是存在问题的:当在做新项目时发现业务逻辑的高层模块 都是一样的,但是客户希望用不同的数据库或存储信息方式,这时想再次利用高层模块,可是高层模块与低层模块绑在一起,没办法复用。
如果不管高层还是低层模块都依赖抽象(接口或抽象类),只要接口是稳定的,那么如何一个的更改都不用担心其他受到影响。
为什么依赖了抽象的接口或抽象类就不怕修改?看里氏代换原则。
如果程序中的所有依赖关系都是终止于抽象类或接口,那就是面向对象的设计;反之那就是面向过程的设计。
四、里氏代换原则(LSP)
概念:子类型必须能够替换掉它们的父类型。一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别。也就是说,在软件里面,把父类都替换成它的子类,程序的行为没有变化。
有了这个原则,使得继承复用成为可能。只有当子类可以替换掉父类,软件单位的功能不受影响时候,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。
五、迪米特法则(LoD)也叫最少知识原则
概念:如果两个类不必彼此直接通信,那么这两个类就应当发生直接的相互作用。如果其中一个类需要调用另一个类的某个方法的话,可以通过第三者转发这个调用。
迪米特法则首相强调的前提是在类的结构设计上,每一个类都应当尽量降低成员的访问权限,也就是说,一个类包装好自己的private状态,不需要让别的类知道的字段或行为就不要公开。
迪米特法则其根本思想就是强调了类之间的松耦合。
六、接口隔离原则
概念:使用多个隔离的接口,比使用单个接口要好。还是一个降低类之间的耦合度的意思,从这儿我们看出,其实设计模式就是一个软件的设计思想,从大型软件架构出发,为了升级和维护方便。所以上文中多次出现:降低依赖,降低耦合。