面向对象设计的六大基本原则【转】

面向对象设计的六大基本原则:
1)开闭原则
2)里氏代换原则
3)依赖倒转原则
4)接口隔离原则
5)迪米特法则
6)合成/聚合复用原则

依次解释六大基本原则:
1) 开闭原则:
    即面向扩展开放,面向修改封闭,也就是说系统支持扩展,但是不支持修改。
    为什么这么做?
在开发阶段,我们都知道,如果对一个功能进行扩展,如果只是一味地对方法进行修改,可能会造成一些问题,诸如 可 能会引入新的bug,或者增加代码的复杂度,对代码结构造成破坏、冗余,还需要重新进行全面的测试。那么该怎么解决这些问题?很简单,这就需要系统能够支持扩展,只有扩展性良好的系统,才能在不进行修改已有实现代码的基础上,引进新的功能。

    我们应该怎么做?
要做到开闭原则,就需要多使用抽象类或者接口,将相似的类进行抽象,将公有的功能引入到抽象类中,这样在进行扩展时,只需要依据抽象类,生成新的子类即可。

2) 里氏代换原则:
    即任何使用基类的地方,都能够使用子类替换,而且在替换子类后,系统能够正常工作。
    为什么这么做?
采用里氏替代原则可以增强程序的健壮性,版本升级的时候可以保持非常好的兼容性,即使增加子类,原有的子类也可以继续运行。
    我们应该怎么做?
在引用基类的地方就能引用子类实现


3) 依赖倒转原则:
    即我们的client类要依赖于抽象,而不是依赖于具体,也就是我们经常听到的“要面向接口编程”。
    为什么这么做?
减少类间的耦合性,提高代码的可读性和可维护性。
    我们应该怎么做?
a、每个类尽量都有接口和抽象类,或者抽象类和接口都有。
b、变量的表面类型尽量是接口或者是抽象类。
c、任何类都不应该从具体类派生。(但是在做二次开发的时候,我们无法获得高层代码的时候例外),规则不是绝对的。
d、尽量不要覆写基类已经实现好的方法。

4) 接口隔离原则:
     即应该将接口粒度最小化,将功能划分到每一个不能再分的子角色,为每一个子角色创建接口,通过这样,才不会让接口的实现类实现一些不必要的功能。
    为什么这么做?
避免让接口的实现类实现一些不必要的功能
    我们应该怎么做?
建立单一的接口,不要建立臃肿的庞大的接口,也就是说接口的方法尽量少。

5) 迪米特法则:
    即尽量减少类之间的依赖关系.
    为什么这么做?
       降低类之间的耦合。
    我们应该怎么做?
       在应用中最直接的实现就是在两个类中间建一个中介类。但是这样可能会造成中介类的澎爆。

6) 合成/聚合复用原则:
    即少用继承,多用组合。
    为什么这么做?
优先使用对象的合成/聚合将有助于你保持每个类被封装,并被集中在单个任务上。这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。
    我们应该怎么做?
使用组合也就是将两个类之间建立关联关系,将一个类做为另一个类的属性。
继承与组合主要是区分两个角色之间是"is a"还是"has a"的关系,如果是"is a"就需要使用继承,而如果是"has a"就需要使用组合。
例如笔可以分为钢笔和油笔,这就是is a的关系,但是油笔与笔芯就是has a的关系。

猜你喜欢

转载自gi-gi.iteye.com/blog/1890671