适配器是什么? 我理解的是就像生活中的插口转换器, 本来是USB接口的,你要想使用直流电,就得接上一个转换器。
用书上的例子举例:
比如,在一个画图的小程序中,你已经实现了绘制点、直线、方块等图形的功能。而且为了让客户程序在使用的时候不用去关心它们的不同,还使用了一个抽象类来规范这些图形的接口。现在你要来实现圆的绘制,这时你发现在系统其他的地方已经有了绘制圆的实现。在你庆幸之余,发现系统中已有的方法和你在抽象类中规定的方法名称不一样!这可怎么办?修改绘制圆的方法名,就要去修改所有使用它的地方;修改你的抽象类的方法名,也要去修改所有图形的实现方法以及已有的引用。还有其它的方法没有?那就是适配器模式了。
适配器的组成:
目标角色: 定义client使用的接口。
被适配角色:这个角色有一个已经存在并使用了的接口,而这个接口是需要我们适配的。
适配器角色:它将“被适配角色”已经有的接口转换成为目标橘色希望的接口。
代码:
class Circle extends Shape { //这里引用了TextCircle private TextCircle tc; public Circle () { tc= new TextCircle(); //初始化 } void public display() { tc.displayIt(); //在规定的方法里面调用TextCircle 原来的方法 } }
Target(目标角色)就是Sharp类,Circle就是适配器角色, TextCircle就是被适配器角色。
适配器模式和代理模式很类似,书上解释“两者的主要区别在于代理模式应用的情况是不改变接口命名的,而且是对已有接口功能的一种控制;而适配器模式则强调接口转换。”
不是很明白,期待以后对代理模式能更深入了解吧。