前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >常用设计模式——适配器模式

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

作者头像
用户5325874
发布2020-04-13 18:53:47
1560
发布2020-04-13 18:53:47
举报

适配器模式

概念

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

image-20200116095238954
image-20200116095238954

实际上适配器有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不支持多重继承。

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 适配器模式
    • 概念
      • 对象适配器示例
        • 类适配器例子
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档