面向对象的几个原则

http://joard.iteye.com/blog/168069

开-闭原则 Open-Closed Principle OCP
里氏代换原则 Liskov Substitution Principle LSP
依赖倒转原则 Dependency Inversion Principle DIP
接口隔离原则 Interface Segregation Principle ISP
组合/聚合复用原则 Composition/Aggregation Principle CARP
迪米特法则 Law of Demeter LoD
可扩展性:OCP, LSP, DIP,CARP
灵活性:OCP, ISP,LoD

1.开闭原则 OCP
一个软件的实体应当对扩展开放,对修改关闭。
Software entities should be open for extension,but closed for modification.

对可变性的封装原则 Principle of Encapsulation of Variation EVP
EVP实际上是设计模式的主题,换言之,所有的设计模式都是对不同的可变性的封装,从而使系统在不同的角度上达到OCP要求。

2.里氏代换原则 LSP
如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有对象o1都代换成o2时,程序P的行为没有变化,那么类型T2是T1的子类型。
LSP要求凡是基类使用的地方,子类型一定适用。
LSP是一条非常严格的原则,要求基类变为子类的时候,其程序行为不发生改变。在oop时并没有严格按照LSP来做。

3.依赖倒转原则 DIP
表述1:抽象不应当依赖于细节,细节应当依赖于抽象。
Abstractions should not depend upon details, details should depend upon abstractions.
表述2:要针对接口编程,不要针对实现编程。
Program to an interface, not an implementation.

4.接口隔离原则 ISP
使用多个专门的接口比使用单一的总接口要好。
一个类对另一个类的依赖性应当是建立在最小接口上的(LoD)。

5.合成/聚合复用原则 CARP
= 合成复用原则 Composite Reuse Principle CRP
要尽量使用合成/聚合,尽量不要使用继承。
继承的优点:①新类易实现. ②易修改或扩展
缺点:①继承复用破环包装,白箱复用.
②超类发生变化,子类不得不改变.
③继承的实现是静态的,不能在运行时改变.
优缺点的②是相互对应的。

6.迪米特法则 LoD
= 最少知识原则 Least Konwledge Principle
一个对象应当对其他对象有尽可能少的了解。
表述:
①只与你直接的朋友们通信 Only talk to your immediate friends
②不要跟陌生人说话 Don's talk to strangers
③每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。
LoD的实质是控制对象之间的信息流量,流向及信息的影响。
①优先考虑将一个类设置成不变类.
②尽量降低类/成员的访问权限.

要想恰到好处地在一个系统里面使用设计模式,必须做到以下几点:
①完全了解面临的问题,这就是说要完全了解具体情况。如果不完全了解所面临的难题,怎么能谈得上解决问题呢?
②完全了解模式,这就是说要十分懂得理论。如果不完全懂得所使用的理论,怎么能够正确地应用这一理论呢?
③非常了解怎样使用设计模式解决实际的问题,这就是说要将模式理论与具体系统需求情况相结合。如果设计师不知道一个设计模式怎样对系统设计有帮组的话,最好不要使用这个模式。不要只是因为想在简历上写上设计模式方面的经验就盲目地使用模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值