设计模式:设计模式的七大原则

背景  

 设计模式是人们经过长期编程经验总结出来的一种编程思想。随着软件工程的不断演进,针对不同的需求,新的设计模式不断被提出(比如大数据领域中这些年不断被大家认可的数据分片思想),但设计模式的原则不会变。基于设计模式的原则,我们可以使用已有的设计模式,也可以根据产品或项目的开发需求在现有的设计模式基础上组合、改造或重新设计自身的设计模式。设计模式有7个原则:单一职责原则、开闭原则、里氏代换原则、依赖倒转原则、接口隔离原则、合成/聚合复用原则、迪米特法则,接下来对这些原则一一进行讲解。

一:单一原则

单一职责原则又称单一功能原则,它规定一个类只有一个职责。如果有多个职责(功能)被设计在一个类中,这个类就违反了单一职责原则。比如我们定义的UserService接口,ProductService接口,就提现了单一职责。

 

二:开闭原则

开闭原则规定软件中的对象(类、模块、函数等)对扩展开放,对修改封闭,这意味着一个实体允许在不改变其源代码的前提下改变其行为,该特性在产品化的环境下是特别有价值的,在这种环境下,改变源代码需要经过代码审查、单元测试等过程,以确保产品的使用质量。遵循这个原则的代码在扩展时并不发生改变,因此不需要经历上述过程。这就要求顶层设计高度抽象化,面向抽象编程。

 

三:里氏替换原则

里氏代换原则是对开闭原则的补充,规定了在任意父类可以出现的地方,子类都一定可以出现。实现开闭原则的关键就是抽象化,父类与子类的继承关系就是抽象化的具体表现,所以里氏代换原则是对实现抽象化的具体步骤的规范。这里要求的就是子类是父类的增强,不去改变父类原有的方法,这样才能直接替换。可以理解为新版本(子类)要完全兼容旧版本(父类)。

 

四:依赖倒置原则

依赖倒转原则指程序要依赖于抽象(Java中的抽象类和接口),而不依赖于具体的实现(Java中的实现类)。简单地说,就是要求对抽象进行编程,不要求对实现进行编程,这就降低了用户与实现模块之间的耦合度。比如Spring里面依赖注入的时候注入接口,而不是具体的实现,当有多个实现的时候可以很方便的切换使用。

 

五:接口隔离原则

接口隔离原则指通过将不同的功能定义在不同的接口中来实现接口的隔离,这样就避免了其他类在依赖该接口(接口上定义的功能)时依赖其不需要的接口,可减少接口之间依赖的冗余性和复杂性。比如我们定义的IUserService,IProductService分别封装用户和产品相关的接口。

 

六:合成复用原则

合成/聚合复用原则指通过在一个新的对象中引入(注入)已有的对象以达到类的功能复用和扩展的目的。它的设计原则是要尽量使用合成或聚合而不要使用继承来扩展类的功能。比如使用spring的依赖注入完成相应功能。

 

七:迪米特法则(最少知道原则)

迪米特法则指一个对象尽可能少地与其他对象发生相互作用,即一个对象对其他对象应该有尽可能少的了解或依赖。其核心思想在于降低模块之间的耦合度,提高模块的内聚性。迪米特法则规定每个模块对其他模块都要有尽可能少的了解和依赖,因此很容易使系统模块之间功能独立,这使得各个模块的独立运行变得更简单,同时使得各个模块之间的组合变得更容易。比如一些方法不必要暴露的就用private修饰。、

一句话归纳七大设计原则

设计原则一句话归纳目的
开闭原则对扩展开放,对修改关闭减少维护以前的代码带来新的风险
依赖倒置原则高层不依赖底层更利于代码结构的升级和扩展
单一职责原则个类只干一件事情 便于理解提高代码可读性
接口隔离原则一个接口只干一件事情 功能解耦高内聚,低耦合
迪米特法则不该知道的不要知道 只和朋友交流,不和陌生人说话减少代码臃肿
里氏替换原则子类重写父类方法功能发生改变,不应该影响父类方法的含义和功能防止继承泛滥
合成复用原则尽量使用组合实现代码复用,而不使用继承降低代码耦合

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值