1、为什么要设计模式
在软件设计、开发中,会遇到各种各样的问题,比如代码难复用、对原有程序扩展时如果设计的不好就得面临更改原来的代码、类臃肿复杂不便于阅读或者维护等等诸多问题。
设计模式就是用来解决软件设计、开发中的各种问题,核心解决的是:
- 代码复用
功能或者模块的复用,不用在每个模块或者每个功能中都写一样的功能逻辑 - 提高扩展性
实现在原功能或者模块加功能时,不需要更改原来的功能/模块逻辑代码 - 提高可读性/维护性
类功能单一,降低复查度,提高可读性及维护性 - 实现高内聚,低耦合
功能模块相关的逻辑封装在功能模块内,提高内聚性;模块间/功能间减少彼此的依赖减低耦合性
2、设计模式七大原则
2.1、单一职责原则
一个类只实现一个单一功能,如果功能复杂则进行功能类的拆分在进行组合,减低类的复杂度,提高可读性/维护性
2.2、开闭原则
对扩展开发,对修改闭合。通过抽象构建框架,实现扩展细节来达到开闭原则。开闭原则的核心是提高扩展性,在原用功能的基础上增加新功能而不需要更改原功能的逻辑代码。
2.3、依赖倒置原则
引用依赖的是接口/抽象类,而不是具体实现。抽象不依赖具体实现,具体实现依赖抽象。它是基于接口/抽象的编程模式。核心是提高扩展性
2.4、接口隔离原则
如果一个类实现的接口中有不需要使用的方法,那么需要对接口进行细分,保证类只实现最小力度的接口,达到可读性/阅读性
2.5、里氏替换原则
继承关系中,父类的实现对子类应该是透明的,即子类进来不要重新父类中的实现方法,因为会引起维护性/可移植性变差,同时如果要修改父类的实现方法对应的所有的子类可能也都需要修改。
里氏替换基于继承关系,会增加耦合性,如何解决——》通过组合/聚合/关联/依赖替换继承关系实现低耦合
为什么继承会增加耦合性?继承可能会是多层次继承关系,操作几个类依赖其他几个类,所有增加了耦合性;而组合/聚合/关联/依赖则是可以避免多层次的依赖关系,实现低耦合。
2.6、迪米特法则
也叫最少知道原则,它不关心它依赖的的类的具体实现,被依赖的类的功能逻辑封装在其内部,只提供public而不暴露其他信息。其核心是实现高内聚,低耦合
2.7、合成复用原则
使用组合/聚合/关联/依赖的方式对功能进行复用或者组装,实现高内聚,低耦合的目标。