GOF之适配器模式
GOF设计模式之适配器模式
从现在开始我们由建造模式进入到结构模式。相比于建造模式,结构模式或许对我们的设计的帮助是更大的。
我们一个产品弄完以后,不是就是一劳永逸了。我们需要对产品进行维护。所以说 ,如果在产品的设计的初衷,如果我们已经使用了比较好的结构模式的话,那么对于我们的产品的维护是很有帮助的。这是要注意的。
现在我们先来学习第一种结构模式之适配器模式。所谓的适配器模式,我们可以举一个简单的例子:
比如说如果我们的笔记本电脑需要连接一个机械键盘。但是笔记本电脑上的接口都是USB类型的接口。而机械键盘上的接口不是USB接口。那么如果不适用其它的工具的话,我们是不能够连接上的。所以我们需要使用一个工具,它的一边是USB接口的类型,一边是和机械键盘的接口相同的类型。这样的话,我们就可以使
机械键盘连接上电脑了。在这个例子中,其实电脑相当于目标对象,机械键盘(使用的是ps/2接口)相当于被适配的对象,它有一个功能就是可以打字。而我们所使用的工具就是适配器对象。这是要理解的。
其实生活中,还有很多这样的例子,比如,我有一个三孔的插座,但是我电器是俩个插孔的。这样的话,是不能够使用的。同样的,我也需要使用一个工具来完成转接。这样的一种能模式其实就是适配器模式。
在实际的应用当中,我们可以先建立一个适配器的接口,然后在写一个适配器接口的实现类。那么目标对象和
被适配的对象只需要和适配器对象打交道就可以了。这是要注意的。
其实适配器模式在产品的升级过程当中,是经常会使用到的。在产品升级的过程当中,我们不可能将1.0的产品
功能全部弄掉。在这种情况下,就需要大量的使用适配器模式。其实在IO流中的InputStreamReader中也使用到了
这种设计模式。这是要注意理解的。
接下来我们来看一个实例:
package com.lg.adapter;
/**
* Created by 鏉庢灉 on 2016/8/8.
*/
/**
* 这是一个被适配的对象。它可以完成一定的功能
* @author 李果
*
*/
public class Adaptee {
public void haddleRequest() {
System.out.println("正在处理请求");
}
}
package com.lg.adapter;
/**
* Created by 鏉庢灉 on 2016/8/8.
*/
/**
* 这是一个被适配的对象。它可以完成一定的功能
* @author 李果
*
*/
public class Adaptee {
public void haddleRequest() {
System.out.println("正在处理请求");
}
}
package com.lg.adapter;
/**
* Created by 鏉庢灉 on 2016/8/8.
*/
/**
*
* @author 李果
*这是实现了适配器接口的一个实现类。
*在这里采用了组合的方式来 处理被适配的对象
*/
public class Adapter implements Target {
private Adaptee adaptee;//被适配的对象
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
//通过这个方法来处理被适配的对象的功能
@Override
public void handleRequest() {
adaptee.haddleRequest();
}
}
package com.lg.adapter;
/**
* Created by 鏉庢灉 on 2016/8/8.
*/
/**
*
* @author 李果
*这是客户端的功能
*在其中的一个方法中传入一个适配器对象的接口。
*在接下来的方法中再进行处理
*/
public class Client {
public static void test(Target target) {
target.handleRequest();
}
public static void main(String[] args) {
Adaptee adaptee = new Adaptee();
Adapter adapter = new Adapter(adaptee);
test(adapter);
}
}
最后的结果的输出为:
正在处理请求