程序员人生 网站导航

面向对象编程的六大原则

栏目:综合技术时间:2015-02-13 09:00:18


参考文章:

http://blog.csdn.net/coolingcoding/article/details/8043265

http://www.cnblogs.com/loulijun/archive/2012/03/05/2380524.html

 

1、单1职责原则:

全称:“Single-Responsibility Principle”

说明:就1个类而言,应当只专注于做1件事和唯一1个引发它变化的缘由。所谓职责,我们可以理解他为功能,就是设计的这个类功能应当只有1个,而不是两个或更多。也能够理解为援用变化的缘由,当你发现有两个变化会要求我们修改这个类,那末你就要斟酌撤分这个类了。由于职责是变化的1个轴线,当需求变化时,该变化会反应类的职责的变化。

使用SRP注意点

1、1个公道的类,应当唯一1个引发它变化的缘由,即单1职责;

2、在没有变化征象的情况下利用SRP或其他原则是不明智的;

3、在需求实际产生变化时就应当利用SRP等原则来重构代码;

4、使用测试驱动开发会迫使我们在设计出现臭味之前分离不公道代码;

5、如果测试不能迫使职责分离,僵化性和脆弱性的臭味会变得很强烈,那就应当用Facade或Proxy模式对代码重构;SRP优点:消除耦合,减小因需求变化引发代码僵化。

2、里氏代换原则

全称:“Liskov Substitution Principle”

说明子类型必须能够替换它们的基类型。1个软件实体如果使用的是1个基类,那末当把这个基类替换成继承该基类的子类,程序的行动不会产生任何变化。软件实体发觉不出基类对象和子类对象的区分。

优点:可以很容易的实现同1父类下各个子类的互换,而客户端可以绝不发觉。

3、依赖颠倒原则

全称:“Dependence Inversion Principle”

说明

1、高层模块不应当依赖低层模块,二者都应当依赖于抽象(抽象类或接口)

2、抽象(抽象类或接口)不应当依赖于细节(具体实现类)

3、细节(具体实现类)应当依赖抽象

抽象:即抽象类或接口,二者是不能够实例化的

细节:即具体的实现类,实现接口或继承抽象类所产生的类,二者可以通过关键字new直接被实例化

而依赖颠倒原则的本质骑士就是通过抽象(抽象类或接口)使各个类或模块的实现彼此独立,不相互影响,实现模块间的松耦合。但是这个原则也是6个设计原则中最难以实现的了,如果没有实现这个原则,那末也就意味着开闭原则(对扩大开发,对修改关闭)也没法实现。

4、接口隔离原则

全称:“Interface Segregation Principle”

说明使用多个专1功能的接口比使用1个的总接口总要好。从1个客户类的角度来说:1个类对另外1个类的依赖性应当是建立在最小接口上的。过于臃肿的接口是对接口的污染,不应当逼迫客户依赖于它们不用的方法。

优点:会使1个软件系统功能扩大时,修改的压力不会传到别的对象那里。

如何实现接口隔离原则

不应当逼迫用户依赖于他们不用的方法。

1、利用拜托分离接口。

2、利用多继承分离接口。

5、迪米特原则

全称:“Law of Demeter”

说明对象与对象之间应当使用尽量少的方法来关联,避免千丝万缕的关系。

如何实现迪米特法则?

迪米特法则的主要意图是控制信息的过载,在将其应用到系统设计中应注意以下几点:

1) 在类的划分上,应当创建有弱耦合的类。类之间的耦合越弱,就越有益于复用。

2) 在类的结构设计上,每个类都应当尽可能下降成员的访问权限。1个类不应当public自己的属性,而应当提供取值和赋值的方法让外界间接访问自己的属性。

3) 在类的设计上,只要有可能,1个类应当设计成不变类。

4) 在对其它对象的援用上,1个类对其它对象的援用应当降到最低。

6、开放-封闭原则

全称:“Open-Closed Principle”

说明所谓开放封闭原则就是软件实体应当对扩大开发,而对修改封闭。开放封闭原则是所有面向对象原则的核心。软件设计本身所寻求的目标就是封装变化,下降耦合,而开放封闭原则正是对这1目标的最直接体现。

   开放封闭原则主要体现在两个方面:

   对扩大开放,意味着有新的需求或变化时,可以对现有代码进行扩大,以适应新的情况。

   对修改封闭,意味着类1旦设计完成,就能够独立其工作,而不要对类尽任何修改。

为何要用到开放封闭原则呢?

软件需求总是变化的,世界上没有1个软件的是不变的,因此对软件设计人员来讲,必须在不需要对原有系统进行修改的情况下,实现灵活的系统扩大。

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐