设计模式的六大原则

1 单一职责原则【Single Responsibility Principle】

单一职责原则:应该有且仅有一个原因引起类的变更。

  1. 类的复杂性降低;
  2. 可读性提高;
  3. 可维护性提高;
  4. 变更引起的风险降低。

2 里氏替换原则【Liskov Substitution Principle】

里氏替换法则有两种定义:

第一个定义,最正宗的定义:If for each object o1 of type S there is an object o2 of type T such that for all programs P defined in terms of T, the behavior of P is unchanged when o1 is substituted for o2 then S is a subtype of T.

如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都代换成o2时,程序 P的行为没有发生变化,那么类型T2是类型T1的子类型。

第二个定义,functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.

所有引用基类的地方必须能透明地使用其子类的对象。

第二个定义是最清晰明确的,通俗点讲只要父类能出现的地方我子类就可以出现,而且调用子类还不
产生任何的错误或异常,调用者可能根 就不需要知道是父类还是子类。但是反过来就不成了,有子类出
现的地方,父类 必就能适应,里氏替换法则包 了四层意思:

  1. 子类必须完全的实现父类的方法;
  2. 子类可以有自己的个性;
  3. 覆盖或实现父类的方法时输入参数可以被放大;
  4. 覆盖或实现父类的方法是输出结果可以被缩小。

3 依赖倒置原则【Dependence Inversion Principle】

定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。

  1. 低层模块尽量都要有抽象类或接口,或者两者都有。
  2. 变量的声明类型尽量是抽象类或接口。
  3. 使用继承时遵循里氏替换原则。

4 接口隔离原则【Interface Segregation Principle】

把一个臃肿的接口变更为两个独立的接口依赖的原则就是接口隔离原则,接口是我们设计时对外提供的契约,通过分散定义多个 接口,可以预防 来变更的扩散,提高系统的灵活性和可维护性。

接口隔离原则是对接口进行规范约束,其包 以下四层 义:

  1. 接口尽量要小;
  2. 接口要高内聚;
  3. 定制服务;
  4. 接口设计是有限度的。

一个接口只服务于一个子模块或者业务逻辑。已经被污染了的接口,尽量去修改,若变更的风险较大,则采用适配器模式进行转化处理。

5 迪米特法则【Low Of Demeter】

迪米特法则的简写为 LoD,看清楚中间的那个o是小写。迪米特法则也叫做做最少知识原则(Least Knowledge Principle,简称 LKP)说的都是一会事,一个对象应该对其他对象有最少的了解,通俗的讲一个类对自己需要耦合或者调用的类应该知道的最少,你类内部是怎么复杂、怎么的纠缠不清都和我没关系,那是你的类内部的事情,我就知道你提供的这么多 public 方法,我就调用这个;迪米特法则包含以下四层意思:

  1. 只和朋友交流;
  2. 朋友间也是有距离的;
  3. 是自己的就是自己的;
  4. 谨慎使用 Serializable。

6 开闭原则【Open Close Principle】

开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类等。

 


Appendix

Revision History

时间描述
2016-12-25博文完成

CSDN:http://blog.csdn.net/y550918116j

GitHub:https://github.com/937447974

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值