稀土 2018-01-18
适配器模式适应这样的场景:一个已经存在的类(Adaptee),它因为接口和客户需要的并不匹配而不能直接被重用。
通过定义一个单独的适配器类,此类实现客户需要的接口,内部调用转向到这个已经存在的、但是接口不能直接适配的类Adaptee。
适配器模式的要点在于,通过引入一个适配器类,转换客户代码需要的接口到现存的类,这样做的好处就是这是增加代码,而不去修改代码。增加的是适配器类,无需改动的是先做的类,以及客户调用接口的代码。这也暗和“开闭原则” - 对修改封闭,对添加开放。
我们看一个案例。一个仓库系统,需要使用进销存系统的类来完成对应单据的过账。进销存内的现存类并不能提供仓库系统要求的接口,此时设计者就引入了一个适配器类,Adapter。设计者提供的图是这样的:
他认为自己对画静态UML的能力有限,也不是很规范了。但是意图表达已经非常清晰了。
正式的wiki上对适配器的定义,提供了两种实现适配器模式的可能。第一种是组合Adaptee类到Adapter类内,一种是Adapter类继承Adaptee类,两者的差异在标注的代码中得到体现。继承是更加省事的方案。当然有些条件下不能继承,就只能用组合。比如遇到了sealed类,就没有办法继承了。
前几篇介绍了设计模式的特性并且详细讲解了4种创建型模式,创建型模式是负责如何产生对象实例的,接下来讲讲结构型模式。结构型模式是解析类和对象的内部结构和外部组合,通过优化程序结构解决模块之间的耦合问题。