首页 > 代码库 > 设计模式从零到一之六大原则
设计模式从零到一之六大原则
一、单一职责原则(Single Responsibility Principe)简称是SRP。
单一职责原则的好处:
1、类的复杂性降低,实现什么职责都有清晰明确的定义;
2、可读性提高,复杂性降低,那当然可读性就提高了;
3、可维护性提高,可读性提高,那当然就更容易维护了;
4、变更引起的危险降低,变更是必不可少的,如果接口的单一职责做得好,一个接口修改只对相应的实现类有影响,对其他的接口无影响,这对系统的扩展性,维护性都有非常大的帮助。
单一职责原则提出了一个编写程序的标准,用“职责”或“变化原因”来衡量接口或类设计得是否优良,但是“职责”和“变化原因”都是不可 度量的,因项目而异、因环境而异;
二、里氏替换原则(Liskov Substitution Principle)简称LSP:
定义:如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1都替换成o2时,程序P的行为没有发生变化,那么类型S是类型T的子类型。通俗点讲,就是只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或异常,使用者可能根本就不需要知道是父类还是子类。但是,反过来就不行,有子类出现的地方,父类未必就能适应。
里氏替换原则的好处:
1、代码共享、减少创建类的工作量,每个子类都拥有父类的方法和属性;
2、提高代码的重用性;
3、子类可以类似父类,但又异于父类;
4、提高代码的扩展性;
5、提高产品或项目的开放性;
缺点:
1、继承是侵入性的,只要继承,就必须拥有父类的所有属性和方法;
2、降低代码的灵活性。子类必须拥有父类的属性和方法,让子类自由的世界中多了些约束;
3、增加了耦合性。当父类的变量、常量和方法被修改时,必须要考虑子类的修改,而且在缺乏规范的环境下,珍重修改可能带来非常糟糕的结果——大片的代码需要重构。
三、依赖倒置原则(Dependence Inversion Principle)简称:DIP:
定义:模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的;接口或抽象类不依赖实现类,但实现类依赖于接口或抽象类。
依赖倒置原则的优点:
1、可以减少类之间的耦合性;
2、提高系统的稳定性;
3、降低并行开发引起的风险;
4、提高代码的可读性和可维护性;
如何写:
1、每个类尽量都有接口或者抽象类,或者接口和抽象类两者都具备
2、变量的表面类型尽量是接口或者抽象类
3、任何类都不应该从具体类派生
4、尽量不要覆写基类的方法
5、结合里氏替换原则使用
四、接口隔离原则(Interface Segregation Principle)简称:ISP
定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。
接口隔离原则的优点:
1、原则意义上的好处:接口如果能够保持粒度够小,就能保证它足够稳定。
2、使用多个专门的接口还能够体现对象的层次,因为我们可以通过接口的继承,实现对总接口的定义。
接口隔离原则是对接口进行规范约束 ,主要包含以下4层意思:接口要尽量小、接口要高内聚、定制服务、接口设计是有限度的。
五 、迪米特法则(Law Of Demeter)也称为最少知识法则(Least Konwledge Principle) 简称:LKP
定义:一个对象应该对其他对象有最少的了解。通俗的来讲,一个类应该对自己需要耦合或调用的类知道的最少,你(被耦合或调用的类)的内部是如何复杂都和我没关系,那是你的事情,我就知道你提供的这么多Public方法,我就调用这么多,其他的我一概不管。
迪米特法则的优点:类间解耦,弱耦合,只有弱耦合了以后,类的复用性才可以提高。
缺点:产生大量的中转或者跳转类,导致系统的复杂性提高,增加了维护难度。
六、开闭原则(Open Closed Principle)简称:OCP
开闭原则(OCP)是面向对象设计中“可复用设计”的基石,是面向对象设计中最重要的原则之一,其它很多的设计原则都是实现开闭原则的一种手段。对于扩展是开放的,对于修改是关闭的,这意味着模块的行为是可以扩展的。当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改变的新行为。也就是说,我们可以改变模块的功能。对模块行为进行扩展时,不必改动模块的源代码或者二进制代码。模块的二进制可执行版本,无论是可链接的库、DLL或者.EXE文件,都无需改动。
开闭原则的优点:
1、提高复用性
2、提高可维护性
3、面向对象开发的要求
好了,这一章就写到这,欢迎大家加入QQ群:280993838 。或者关注我的公众号:
设计模式从零到一之六大原则