适配器模式

2019-03-02  本文已影响0人  yuzhiyi_宇

适配器模式(Adapter),将一个类的接口转接成客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的哪些类可以一起工作。

适配器模式结构图

适配器模式中的角色:

适配器模式简单实现

适配器模式分为类适配器模式、对象适配器模式、接口适配器模式。

1. 类适配器模式简单实现

(1)需要适配的类

public class AC110 {

  public void output110V() {
     System.out.println("输出110V");
  }
}

(2)需要得到的类

public interface AC220 {
    void output220() ;
}

(3)适配器类

public class Adapter extends AC110 implements AC220 {

    @Override
    public void output220() {
        super.output110V();
    }
}

(4)客户端调用

public class Client {
    public static void main(String[] args) {
        AC220 ac220 = new Adapter();
        ac220.output220();
    }
}

2. 对象适配器模式

(1) 适配器类

public class Adapter implements AC220 {

    private AC110 mAc110;

    public Adapter(AC110 ac110) {
        this.mAc110 = ac110;
    }

    @Override
    public void output220() {
        mAc110.output110V();
    }
}

(2)客户端调用

public class Client {
    public static void main(String[] args) {
        AC220 ac220 = new Adapter(new AC110());
        ac220.output220();
    }
}

3. 接口适配器模式

(1)需要得到的类

public interface ACOutput {

    void output5V();

    void output220V();

    void output330V();
}

(2) 适配器类

public class ACAdapter implements ACOutput {

    private AC110 mAc110;

    public ACAdapter(AC110 ac110) {
        this.mAc110 = ac110;
    }

    @Override
    public void output5V() {
        mAc110.output110V();
    }

    @Override
    public void output220V() {
        mAc110.output110V();
    }

    @Override
    public void output330V() {
        mAc110.output110V();
    }
}
public class AC220Adapter extends ACAdapter{

    public AC220Adapter(AC110 ac110) {
        super(ac110);
    }

    @Override
    public void output220V() {
        super.output220V();
    }
}

(3) 客户端调用

public class Client {
    public static void main(String[] args) {
        AC220Adapter ac220Adapter = new AC220Adapter(new AC110());
        ac220Adapter.output220V();
    }
}

适配器模式的使用场景

适配器模式的优缺点

优点:

类适配器还有的优点:
由于适配器类是适配者类的子类,因此可以再适配器类中置换一些适配者的方法,使得适配器的灵活性更强。

类适配器的缺点:
对于Java、C# 等不支持多重继承的语言,一次最多只能适配一个适配者类,而且目标抽象类只能为接口,不能为类,其使用有一定的局限性,不能将一个适配者类和他的子类同时适配到目标接口。

对象适配器还有的优点:
把多个不同的适配者适配到同一个目标,也就是说,同一个适配器可以把适配者类和他的子类都适配到目标接口。

对象适配器的缺点:
与类适配器模式相比,要想置换适配者类的方法就不容易。

适配器模式与代理模式的区别:
适配器模式:是把2个不同的东西转换到可以正常使用,适配器是去迎合目标对象与源对象。
代理模式:是2个对象都有相同的功能,2者接口是一样的。

上一篇 下一篇

猜你喜欢

热点阅读