面向对象设计原则

来源:互联网 发布:跑跑卡丁车淘宝 编辑:程序博客网 时间:2024/04/28 08:14

1.单一职责原则
    一个类,最好只做一件事,只有一个引起它变化的原因。
    一个类只有一个引起它变化的原因,否则就应当考虑重构。
    单一职责原则,由引起变化的原因决定,而不由功能职责决定。虽然职常常是引起
变化的轴线,但是有时却未必,应该审时度势。
    测试驱动开发,有助于实现合理分离功能的设计。
    可以通过Facade模式或Proxy模式进行职责分离。
    一个类,应该仅有一个引起它变化的原因,不要将变化原因不同的职责封装在一起
,而应该隔离。
2.开闭原则
    对扩展开放,对修改关闭。
    实现开闭原则的关键是抽象化,并且从抽象化导出具体实现。
    开闭原则是面向对象设计的主要目标。
3.里氏代换原则
    在使用基类和抽象类的地方,都可以用其子类或实现了该接口的类替换。
    里氏代换原则是继承复用的基石。所有支持继承复用的语言都满足里氏代换原则
4.依赖倒转原则
    要依赖于抽象,不要依赖于具体。
    要针对抽象编程,不要针对实现编程。
    要针对抽象编程的意思是:应当使用抽象和接口进行变量的类型声明、参量的类型
声明、方法的返回类型声明,以及数据类型的转换等。
    不要针对实现编程的意思是:不应当使用具体类进行变量的类型声明、参量的类型
声明、方法的返回类型声明,以及数据类型转换等。
    要保证做到这点,一个具体的类应当只实现接口和抽象类中声明的方法,而不应当
给出多余的方法。这个比较难。一个具体类总有自己独有的方法。
    倒转依赖强调一个系统内的实体之间关系的灵活性。基本上,如果设计师希望遵守
开闭原则,那么依赖倒转原则便是达到要求的途径。
    里氏代换原则是是依赖倒转原则的基础。
    依赖倒转原则是面向对象设计的核心原则,设计模式的研究和应用是以依赖倒转原
则为指导原则的。
    依赖倒转原则是面向对象设计的主要机制。
5.接口隔离原则
    使用多个专门的接口比使用单一的总接口要好。
    一个类对另一个类的依赖性应当建立在最小的接口上。
    准确而恰当地划分角色以及角色对应的的接口,是面向对象设计的一个的组成部
    分。将没有关系的接口合并在一起,形成一个臃肿的大接口,是对角色和接口的
污染。
6.合成/聚合复用原则
    意思:在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的
对象通过向这些对象的委派达到复用已有功能的目的。
    要尽量使用合成/聚合,尽量不使用继承。
7.迪米特法则
    又叫做最少知识原则,就是说,一个对象应当对其他对象有尽可能少的了解。
    优先考虑将一个类设置成不变类。
    尽量降低一个类的访问权限。
    谨慎使用序列化。
    尽量降低成员的访问权限。


    什么时候使用继承复用:
    只有当以下Coad条件满足时,才应当使用继承关系:
    1.子类是超类的一个特殊种类,而不是超类的一个角色,也就是要区分“Has a”
和“Is a”两种关系的不同。Has-A关系应当使用合成/聚合关系描述,而只有Is-A关系
才符合继承关系。
    2.永远不会出现需要将子类换成另一个子类的情况。如果设计师不是很肯定一个类
会不会在将来变成另一个子类的话,就不应当将这个类设计成当前这个超类的子类。
    3.子类具有扩展超类的责任,而不是具有转换掉(Override)或注销掉超类的责任。
如果子类需要大量地转换掉超类的行为,那么这个子类不应当成为这个超类的子类。
    4.只有在分类学角度上有意义时,才可以使用继承,不要从工具类继承。
    里氏代换原则是可否使用继承关系的准绳。上面的Coad条件以比里氏代换原则更加
通俗易懂的方式讲解了继承关系的使用。Coad条件的表达不如里氏代换原则严格,但是
一般而言,凡是不符合Coad条件的均不会满足里氏代换原则。
原创粉丝点击