设计模式设计模式

设计模式—适配器模式

2016-06-02  本文已影响159人  HJXANDHMR

本文博客同步发表在 http://hjxandhmr.github.io/2016/06/02/DesignPattern-Adapter/
今天我们来学习一种结构型模式,适配器模式(Adapter Pattern)。

模式定义

将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式有两种,一种是对象适配器,一种是类适配器。

模式结构

适配器模式包含如下角色:

Target: 目标抽象类
Adapter: 适配器类
Adaptee: 适配者类
Client: 客户类

UML图

类适配器UML图

对象适配器UML图

类适配器模式代码实现

Target.java

public interface Target {

    void sampleOperation1();

    void sampleOperation2();
}

Adaptee.java

public class Adaptee {

    public void sampleOperation1() {
        System.out.println("sampleOperation1");
    }
}

Adapter.java


public class Adapter extends Adaptee implements Target {

    @Override
    public void sampleOperation2() {
        System.out.println("sampleOperation2");
    }

}

测试类


public class MyClass {

    public static void main(String[] args) {
        Adapter adapter = new Adapter();
        adapter.sampleOperation1();
        adapter.sampleOperation2();
    }
}

运行结果

对象适配器代码实现

Target.java


public interface Target {

    void sampleOperation1();

    void sampleOperation2();
}

Adaptee.java

public class Adaptee {

    public void sampleOperation1() {
        System.out.println("sampleOperation1");
    }
}

Adapter.java


public class Adapter implements Target {

    private Adaptee mAdaptee;

    public Adapter(Adaptee adaptee) {
        mAdaptee = adaptee;
    }

    @Override
    public void sampleOperation1() {
        mAdaptee.sampleOperation1();
    }

    @Override
    public void sampleOperation2() {
        System.out.println("sampleOperation2");
    }

}

测试类


public class MyClass {

    public static void main(String[] args) {
        Adapter adapter =new Adapter(new Adaptee());
        adapter.sampleOperation1();
        adapter.sampleOperation2();
    }
}

运行结果

模式分析

适配器模式的优点

类适配器模式还具有如下优点:

对象适配器模式还具有如下优点:

适配器模式的缺点

类适配器模式的缺点如下:

对象适配器模式的缺点如下:

参考
http://design-patterns.readthedocs.io/zh_CN/latest/structural_patterns/adapter.html
http://www.cnblogs.com/java-my-life/archive/2012/04/13/2442795.html

欢迎大家关注我的微信公众号,我会不定期的分享些Android开发的技巧

[站外图片上传中……(5)]

上一篇 下一篇

猜你喜欢

热点阅读