设计模式GOF23——适配器模式

适配器模式(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只能但继承,组合的方式虽然对了一个对象的创建,但是让程序的扩展性会变得更好了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章