适配器设计模式

适配器设计模式

适配器模式在生活中还是很常见的,比如笔记本上的电源适配器,可以使用110~220V之间变化的电源,笔记本还能正常工作。适配器模式就是把一个接口或类转换成其他接口或类,也可以说适配器模式也就是一个包装模式。

适配器模式通用类图

适配器模式三个角色:
(1)Target 目标角色:我们期待的接口
(2)Adaptee源角色:源角色转换为目标角色
(3)Adapter适配器角色
代码Demo:
目标接口:

//Target.java
public interface Target {
    public void request();}
//ConcreteTarget.java
public class ConcreteTarget implements Target {

    @Override
    public void request() {
        System.out.println("now, service for you !");
    }
}

Adapetee源角色:

//Adapetee.java
public class Adaptee {
    public void dosomething() {
        System.out.println("I`m doing something");
    }
}

Adapeter适配器:

//Adapter.java
public class Adapter extends Adaptee implements Target {
    @Override
    public void request() {
        super.dosomething();
    }
}

客户端:
//Client.java

public class Client {

    public static void main(String[] args) {
        Target target = new ConcreteTarget();
        target.request();
        Target newTarget = new Adapter();
        newTarget.request();
    }
}

适配器模式使用场景:你有动机修改一个已经投产中的接口时,适配器模式可能是最适合的模式。
适配器模式的扩展:如果源角色Adaptee不止一个呢?这是时候的适配器又该如何写呢?
在上述Demo里面添加第二个源角色Adapetee2

//Adaptee2.java
public class Adaptee2 {
    public void say(){
        System.out.println("hello");
    }
}
这时候就不能再使用上面的方法了,java是不支持多继承的,无法让Adapter同时继承Adaptee和Adaptee2,此路不通,我们可以使用类关联的方法。我们这样写适配器Adapter和client:
//Adapter.java
public class Adapter implements Target {
    private Adaptee a1 = null;
    private Adaptee2 a2 = null;
    public Adapter(Adaptee a1, Adaptee2 a2) {
        this.a1 = a1;
        this.a2 = a2;
    }
    @Override
    public void request() {
        a1.dosomething();
        a2.say();
    }
}
//Client.java
public class Client {

    public static void main(String[] args) {
        Adaptee a1 = new Adaptee();
        Adaptee2 a2 = new Adaptee2();
        Target target = new ConcreteTarget();
        target.request();
        Target newTarget = new Adapter(a1,a2);
        newTarget.request();
    }
}

巧妙的利用构造方法把原有的继承关系变成了关联关系,上面的方法叫类适配器,而这种叫对象适配器,下面是对象适配器的类图。
对象适配器的类图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值