设计模式(Java随笔)—六大设计原则

一、单一职责原则(提倡高内聚)

定义:一个类,应当只有一个引起它变化的原因;即一个类应该只有一个职责。

就一个类而言,应该只专注于做一件事且仅有一个引起它变化的原因,该职责提出了对对象职责的一种理想期望,对象不应该承担太多职责,正如人不该一心分为二用。唯有专注,才能保证对象的高内聚;唯有单一,才能保证对象的细粒度。对象的高内聚和细粒度有利于对象的重用。

优点:

  • 降低类的复杂性
  • 提高类的可读性
  • 提高代码的可维护性和复用性
  • 降低因变更引起的风险

二、接口隔离原则

接口有分类:

  • 实例接口

  1. 解释:在Java中申明一个类,然后用new关键字产生一个实例,它是对一个类型事物所具有的方法特征的描述,也叫做一个“接口”,这仅仅是一种逻辑上的抽象(eg:Person A=new Person();产生一个实例,该实例遵从的标准是Person这个类,Person就是A的接口)。
  2. 原则定义:客户端不应该依赖它不需要的接口。
  • 类接口
  1. 解释:在Java中使用Interface严格定义的接口。
  2. 原则定义:类之间的依赖关系应该建立在最小接口上。

具体含义:

  • 一个类对另一个类的依赖性应该建立在最小接口上。
  • 一个接口代表一个角色,不应该将不同的角色都交给一个接口。
  • 不应该强迫客户依赖于他们不用的方法。

应用场景:

  • 只提供用户需要的方法,屏蔽不需要的方法。
  • 一个接口只对一个子模块或业务逻辑进行服务。
  • 接口设计因项目而异,因环境而异。

注:接口隔离原则有点像单一职责原则,它们的区别在于:接口隔离要求接口设计尽量原子化,做到接口专一,避免接口臃肿,降低子类间的依赖耦合;单一职责原则要求类的设计尽量原子化,做到类专一,降低类之间的耦合,提高内聚;


三、开—闭原则

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

即当设计一个模块时,应该使这个模块可以在不被修改的前提下被扩展,也就是在源码不被改变的前提下改变这个模块的行为。面向对象设计中,开—闭原则是最基础的,起到总的指导作用,其他原则都是该原则的具体形态。


四、依赖倒置原则

定义:面向接口编程。

具体含义:

  • 高层模块不应该依赖低层模块,两者都应该依赖于抽象。
  • 抽象不应该依赖于细节。
  • 细节应该依赖于抽象。

在Java中,抽象就是指接口或抽象类,两者都是不能被实例化的。细节就是实现类,其特点就是可以被实例化(new关键字)。故依赖倒置原则在Java中的体现为:

  • 模块之间的依赖是通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的。
  • 接口或抽象类不依赖于实现类。
  • 实现类依赖接口或抽象类。

五、里氏替换原则

定义:任何基类可以出现的地方,子类一定可以出现(即:子类必须能够替换掉父类)。

具体含义:子类可以扩展父类的功能,但是不能改变父类原有的功能。

  • 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
  • 子类可以增加自己特有的方法。
  • 当子类的方法重载父类方法时,方法的前置条件(即方法的形参)要比父类的方法的输入参数更宽松。
  • 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。

六、迪米特法则(强调松耦合)

定义:又叫最少知识原则,对一个类中的部分调用采用第三者转发(只与最直接的朋友通信)。

避免类之间的直接通信,而是以“中介”的形式来建立关系。如总公司通过分公司这个“中介”来与分公司的员工发生联系。

迪米特法则的初衷是降低类之间的耦合,这样的要求决定了需要创建更多的类。所有不能过分的使用该法则,否则会导致系统复杂度变大。


+合成聚合复用原则

定义:在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新对象通过向这些对象的委派达到复用已有功能的目的。

强调:要尽量使用合成/聚合,尽量不使用继承

  • 六大设计原则在Java中的实现是建立在继承之上的。
  • 合成用来表示一种很强的“拥有”关系,私有。如房子与房间的关系,房子没了,房间也就没了。
  • 聚合用于表示一种弱的“拥有”关系,共享。如图书馆与书籍的关系,图书馆没了,书籍还可以搬到别的地方,而不会随着图书馆的消失而消失。

参考:

依赖倒置原则

设计模式六大原则(2):里氏替换原则

设计模式六大原则(5):迪米特法则

Java设计模式——合成/聚合复用原则

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值