首页
学习
活动
专区
圈层
工具
发布

常用设计模式——适配器模式

适配器模式

概念

将一个类的接口,转换成客户期望的另外一个接口。

实际上适配器有2种,对象适配器和类适配器

对象适配器示例

使用组合的方式实现,不仅可以适配某个类,还可以适配该类的子类。

代码语言:javascript
复制
/**
 * 鸭子
 * @author huangy on 2019-05-26
 */
public interface Durk {

    void quack();

    void fly();

}
代码语言:javascript
复制
/**
 * 火鸡
 * @author huangy on 2019-05-26
 */
public interface Turkey {

    /**
     * 火鸡的叫声
     */
    void gobble();

    void fly();
}
代码语言:javascript
复制
/**
 * 某个火鸡实现
 * @author huangy on 2019-05-26
 */
public class WildTurkey implements Turkey {

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

    @Override
    public void fly() {
        System.out.println("WildTurkey fly");
    }
}
代码语言:javascript
复制
/**
 * 适配器(将火鸡转变成鸭子)
 * @author huangy on 2019-05-26
 */
public class TurkeyAdapter implements Durk {

    Turkey turkey;

    public TurkeyAdapter(Turkey turkey) {
        this.turkey = turkey;
    }

    @Override
    public void quack() {
        turkey.gobble();
    }

    @Override
    public void fly() {
        turkey.fly();
    }
}
代码语言:javascript
复制
public class DuckTest {

    public static void main(String[] args) {
        // 火鸡对象
        WildTurkey wildTurkey = new WildTurkey();

        // 把火鸡对象包装成鸭子
        Durk durk = new TurkeyAdapter(wildTurkey);

        durk.quack();
        durk.fly();
    }

}

类适配器例子

采用继承的方式实现适配器模式。需要多重继承才能实现,java不支持多重继承。

由于使用继承的方式,适配器不用重新实现被适配者(对象适配器也不需要)。必要的时候,也可以覆盖被适配者的行为。

下一篇
举报
领券