【JAVA】面向对象设计七个原则

来源:互联网 发布:卡廷森林 知乎 编辑:程序博客网 时间:2024/06/10 10:51

    程序设计编码理论上只要跑得起来就没有问题了,但实际上程序是为需求服务的,需求无时无刻都有可能变更,程序也需要做出相应改变,这时如果程序设计混乱,那么大多数时候都是没有办法轻微改动程序就达到需求目标的,而此时给程序大开刀也不允许,最后进入了两难境地。所以最好一开始就依托一套优秀原则来设计程序,以下介绍面向对象设计的七个原则:

 

1. 单一职责原则 Single Responsibility Principle (SRP)

    一个类只负责做一件事情。

 

2. 开闭原则 Open-Close Principle(OCP)

    对扩展开放,对修改关闭。

 

3. 里氏代换原则 Liskov Substituition Principle(LSP)

    子类能够替换其父类被使用。

    要求两点:一、每一个类尽量不要重写父类方法,如果重写也不要影响父类原有功能;二、对比父类,子类应当拥有新功能。使得功能扩展时,可以在使用父类的位置,用子类替换父类,从而即不影响原有功能也新增了功能。

 

4. 依赖倒置原则 Dependence Inversion Principle(DIP)

    细节应该依赖于抽象,抽象不依赖于细节。

    要求设计应该具有高度抽象性,不应一开始就考虑具体类的设计,设计者应该分析出问题的核心并依此设计解决问题的策略,用抽象的方式来解决问题,具体解决方式根据实际情况逐渐细化,以此使得问题的解决不直接依赖于具体实现。

    比如足球进球,进球是目的,达到目的的一种方式是做抬脚,踢中足球这两个事情,是具体实现,这两个事情是我们用踢球这个方式最后解决进球这个问题时必须做的,但进球还可以用头把球顶进球门这种方式,解决问题的方式有多种,不同情况采用不同解决办法,但为了从大局上描述如何解决进球这个问题,在设计时我们首先应该把抬脚,踢中足球这两个事情或用头顶球这个事情抽象为“做动作”这个概念,在具体解决问题时再把这个“做动作”概念具体化,最后使用具体化的办法解决问题。

 

5. 接口隔离原则 Interface Segregation Principle(ISP)

    使用多个专用的小接口,而不使用一个通用的大接口。

 

6. 组合/聚合复用原则 Composition/Aggregation ReusePrinciple(CARP)

    类间关系尽量使用关联关系(组合、聚合),尽量少用继承关系。

 

7. 迪米特法则Law of Demeter(LoD )

    一个对象只对另一个对象保持最少的了解,只与“直接朋友”通信。

    “直接朋友”包括:当前对象;当前对象的成员对象;当前对象的集合成员对象中的元素;当前对象创建的对象;方法参数对象;

 

 

End .

 

0 0