增加一个间接层来解耦的设计模式有:
- 工厂方法模式
- 抽象工厂模式
- 模板方法模式
- 建造者模式
- 桥梁模式
- 命令模式
- 解释器模式
工厂方法模式
工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。
那么工厂方法模式使怎么解耦的呢?假如我们的程序里有 100处需要 new Apple()而且需要 newGreenApple() ;但如果我们突然想要 new RedApple()时会发生什么情况呢?我们会发现我们需要更改 100 处代码,这显然是无法接受的高耦合。
那如果我们用工厂方法模式呢?我们把工厂里生产的产品由 GreenApple改为 RedApple就可以了。只需要修改一处,耦合性大大降低。这就是将实际创建工作推迟到子类当中的好处,既然推迟了,那么我就可以在中间过程织入自定义的逻辑来降低耦合性。
抽象工厂模式
我个人觉得抽象工厂模式就是多一个间接层的工厂方法模式。
模板方法模式
模板方法模式:定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
模板方法模式是一种基于继承的代码复用技术。代码复用这个很明显,那么间接层在哪儿?
其实间接层就是那抽象出来的延迟到子类的方法。将一些步骤的实现延迟到子类,就实现了这些易变的步骤和父类哪些稳定的步骤之间的解耦合。
建造者模式
建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式最明显的作用就是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示了。
建造者模式是怎么解耦合的呢?
建造者模式和工厂方法模式差不多,只是工厂方法模式是创建对象,而建造者模式是有了对象之后去组装这个对象的属性。解耦合原理见工厂方法模式。
桥梁模式
桥梁模式:将抽象部分与实现部分分离,使它们都可以独立的变化。
桥梁模式就是为了应对含有两个维度以上的事物,将这两个维度解耦合,使之可以独立的进行变化。避免了含有两个维度以上时的繁琐和冗长。
命令模式
命令模式:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。
命令模式是一个高内聚的模式,解耦合的作用比较弱,一般只有在更改命令的时候才会看到它的解耦合的好处。
解释器模式
解释器模式:给定一种语言,定义他的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中句子。
解释器模式主要是将符号和这个符号的实现进行解耦。