6大设计原则

来源:互联网 发布:销售信心 知乎 编辑:程序博客网 时间:2024/05/01 19:40

一、6大设计原则列表:

①Single Responsibility----------------------------------单一职责原则;
②Open Close Principle----------------------------------开闭原则;
③Liskow Substitution Principle------------------------里氏替换原则;
④Law of Demeter------------------------------------------迪米特法则;
⑤Interface Segregation Principle----------------------接口隔离原则;
⑥Dependence Inversion Principle--------------------依赖倒置原则。
取以上6原则首单词字母为:SOLLID ≈ solid (稳定的)

二、简单总结:

1.Single Responsibility(单一职责原则)
定义:There should never be more than one reason for a class to change.(应该有且仅有一个原因引起类的变化。)
简单地讲:一个接口或类只有原因引起变化,也就是一个接口或类只有一个职责,它只负责一件事情或只实现一个功能。

2.Liskow Substitution Principle(里氏替换原则)
定义:Function that use pointers or refrences to base class must be able to use objects of classes without knowing it .(所有引用基类的地方必须能透明地使用其子类的对象。)还有另外一个更正式的定义,但比较难懂,略。
简单地讲:只要父类能出现在的地方,子类都可以出现,而且使用子类替代父类也不会产生任何错误或异常,使用者根本不需要知道是父类还是子类。但是,反过不成立,即有子类出现的地方,父类未必就能适应。
备注:所以往往我们使用使用List list = new ArrayList() 和 使用接口或基类作为方法传参数这样的写法。 

3.Dependence Inversion Principle(依赖倒置原则)
定义:High level modules should not depend upon low level modules.Both should depend upon abstraction. Abstractions should not depend upon details. Details should upon abstractions.(高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽取。)
简单地讲:模块间的依赖通过抽象发生,实现类之间不应该发生直接的依赖关系,其依赖关系是通过接口抽象类产生的;接口或抽象类不依赖于实现类;实现类依赖接口或抽象类。
另,依赖的3种写法:①构造函数传递依赖对象;②setter方法传递依赖对象;③接口的方法中声明使用依赖对象。

4.Interface Segregation Principle(接口隔离原则)
定义:The depency of one class to another one should depend on the smallest possible interface.(类间的依赖关系应该建立在最小的接口上。)
简单地讲:建立单一接口,不要建立臃肿庞大的接口。即接口应尽量细化,同时接口中的方法尽量少。
接口隔离职责原则与单一职责原则的区别:两者的审视角度是不相同的,单一职责要求的的是类和接口职责单一,注重的是职责,是业务逻辑上的划分;而隔离接口原则要求的是接口中的方法尽量地少,并且,根据接口隔离原则拆分接口时,首先必须满足单一职责。

5.Law of Demeter(迪米特法则)
简单定义:Only talk to your immedate friends.(只与直接的朋友通信。)
简单地讲:一个对象应该对其他对象有最少的了解,不关心对方内部如何,不和陌生人说话。

6.Open Close Principle(开闭原则)
定义:Software entities like classes, modules and functions should be open for extension but clolsed for modifications.(一个软件实体如类、模块和函数应该扩展开放,对修改关闭。)
简单地讲:我们尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来完成变化。
比如:不对原有代码进行修改,而是继承原实现类,重写要修改的方法。


----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
文章摘抄自《设计模式之禅》秦小波
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

0 0
原创粉丝点击