java模式笔记之6大设计原则

1.概述

6大设计原则:

1)开-闭原则(open-close OCP)

2)里氏代换原则(LSP)

3)依赖倒转原则(DIP)

4)接口隔离原则(ISP)

5)组合聚合复用原则(CARP)

6)迪米特原则(LOD)

遵循这些设计原则可以有效的提高系统的可复用性,同时提高可维护性.


2.开闭原则(OCP)

含义:一个软件实体应该对扩展开发,对修改关闭。

这个原则是说设计这个模块时,应该使这个模块在不被修改的情况下得到功能扩展。

实现方案:1)抽象化.面向对象语言都实现了继承机制。可以为多个有相同作用的子类抽象出一个父类或者接口。在上下文中只针对父类或者接口编程。在扩展功能时只需要新实现一个子类,不用改动上下文,对扩展开放。父类或者接口包含了所有可能的动作,无需再修改,对修改关闭。

    2)对可变性的封装.找到一个系统的可变因素,并把它封装起来。封装的结果是一种可变性不会散落在代码的不同地方;可变性和另一种可变性不能封装在一起。增加可变性不会影响系统固有行为。

尽管大部分系统都无法完全做到开闭原则,但是只要往此方向努力,做到部分符合开闭原则,系统结构也将得到改善。

3.里氏代换原则(LSP)

含义:里氏代换原则:是指一个软件实体如果使用的是一个基类,那么一定适用于子类。而且软件实体并不能区别出基类和子类。

里氏代换原则是集成复用的基石,只有符合里氏代换,增加子类才不会影响软件实体的行为。也是符合开闭原则的保障。


4.依赖倒置原则(DIP)

含义:要依赖于抽象,不要依赖于具体

开闭原则实现的关键是抽象化,并从抽象层中到处具体实现。DIP可以看做实现开闭原则的手段。所谓倒置是相较于传统设计方法,高层次依赖于低层次的模块,抽象层依赖于具体实现。

5.接口隔离原则(ISP)

含义:使用多个专门的接口优于使用单一总接口

接口并不局限于java中的接口角色,应该是一个类的提供的所有方法的特征集合,可以理解成一个类型。开闭原则中对可变性的封转,可变性也是一个接口,多种可变性最好不要封装在一起,这与ISP异曲同工。


6.合成/聚合复用原则(CARP)

含义:在一个新的对象中使用一些已有的对象,使之成为新对象中的一部分,通过向这些对象委派达到复用已有功能的作用.简单地说就是:尽量使用合成/聚合,不要使用继承。

一般情况下,只有在确定类和类之间的关系是"is A"而不是"has A"的时候才使用继承。可以和LSP配合使用。


7.迪米特法则(LoD)

含义:最少知识原则,一个对象应该对其它对象尽可能少得了解。

降低耦合是oo设计中的重要指标,LOD是降低耦合的原则。

狭义的LOD:如果两个不必彼此直接通信,那就不应该相互作用。如果其中一个要调用另一个方法,可以通过第3方调用。

广义的LOD:对对象之间的信息的流量、流向和影响的控制。模块的设计应该尽量将内部数据和实现方式封装起来,达到解耦。

8.结语

6大设计原则中开闭原则是设计的总规则,其它原则都他的实现手段和工具,附属于开闭原则。

里氏代换原则是抽象化(实现开闭原则的方法)实现的具体规范。

依赖倒转通过依赖抽象,不依赖具体实现开闭原则。

合成/聚合复用原则与里氏代换相辅相成。

一个遵循迪米特法则(最少知识法则)的模块更容易实现开闭原则。

接口隔离原则中提倡的小接口,限制了模块或者对象之间的相互依赖程度,使得模块更加容易实现开闭原则。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值