适配器模式(adapter)是结构性模式的一种。结构型模式的核心作用是从程序的结构上实现低耦合,从而可以扩大整体的类结构,用来解决更大的问题。
模式的使用场景
将一个类的接口换成客户需要的另外一个接口,Adapter模式使得原本不兼容不能在一起工作的那些类可以在一起工作。
经常用于旧系统的改造升级。
在java.io.InputStreamReader(InputStream)和java.io.OutputStreamWriter(OutputStream)用到
模式中的角色
目标接口(Target):客户期待的接口。目标可以是具体的也可以是抽象的类,也可以是接口。
需要适配的类(adaptee):需要适配的类,或者配置类。
适配器(adapter):通过包装一个合适的对象,把原接口转换成目标接口。
模式的实现
//被适配的类
public class Adaptee {
//被适配的方法
public void request(){
//被适配的类的操作
}
}
//修改后的接口
public interface Target {
//修改后接口的方法
void handleReq();
}
//适配器类
public class Adapter extends Adaptee implements Target{
//适配器的适配方法,这里是用继承的方式实现的
public void handleReq() {
super.request();
}
}
//使用类
public class Client {
//使用类调用适配器的方法
public void test1(Target t){
t.handleReq();
}
//具体使用(继承方式的使用)
public static void main(String[] args) {
Client c = new Client();
Target t = new Adapter();
c.test1(t);
}
}
其实适配器不止可以用上述的继承方式,也可以用下面的组合的方式
//适配器类
public class Adapter implements Target{
private Adaptee adaptee;
//适配器的适配方法,这里是用组合的方式实现的
public void handleReq() {
adaptee.request();
}
public Adapter(Adaptee a){
super();
this.adaptee = a;
}
}
//使用类
public class Client {
//使用类调用适配器的方法
public void test1(Target t){
t.handleReq();
}
//具体使用(组合方式的使用)
public static void main(String[] args) {
Client c = new Client();
Adaptee a = new Adaptee();
Target t = new Adapter(a);
c.test1(t);
}
}
继承的方式使用时代码少一点,但是Java只能但继承,组合的方式虽然对了一个对象的创建,但是让程序的扩展性会变得更好了。