博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
适配器模式-Adapter(Java实现)
阅读量:4983 次
发布时间:2019-06-12

本文共 4220 字,大约阅读时间需要 14 分钟。

适配器模式-Adapter

是作为两个不兼容的接口之间的桥梁.

先演示一下不使用适配器时的情况

情景就是家里有插座, 电脑有充电器, 充电器不适用适配器, 直接插到插座上进行充电.

  

Charger接口

这个世界上有很多的充电器(Charger), 但是抽象出来的话, 都有以下两个功能:

1. 充电(charge)

2. 插在插座上(setElectricSocket)

public interface Charger {    public void charge();    public void setElectricSocket(ElectricSocket electricSocket);}

ElectricSocket接口

这个世界上有很多不同的插座, 但是抽象出来的话, 都是用来供电的

public interface ElectricSocket {    void supplylEctricity();}

TwoPlugsCharger类

是一种两片插头的充电器. 如图所示:

public class TwoPlugsCharger implements Charger {    private ElectricSocket electricSocket;    @Override    public void setElectricSocket(ElectricSocket electricSocket) {        this.electricSocket = electricSocket;    }    @Override    public void charge() {        System.out.println("使用[两片]插头充电器");        electricSocket.supplylEctricity();    }}

TwoPlugsElectricSocket类

是一种两片插孔的插座, 如图所示:

public class TwoPlugsElectricSocket implements ElectricSocket {    @Override    public void supplylEctricity() {        System.out.println("使用[两片]插座供电");    }}

Computer类

public class Computer {    private Charger charger;    public void setCharger(Charger charger) {        this.charger = charger;    }    public void startingUp() {        charger.charge();    }}

People类

People有电脑, 有充电器, 还可能需要充电器的适配器(适配器之后再提).

我的充电器是两插片的充电器.

public class People {    private Computer computer;    private Charger charger;    private ElectricSocketAdapter adapter;    public People() {        this.computer = new Computer();        this.charger = new TwoPlugsCharger();    }    /**     * 如果需要适配器, 那就在这里设置     */    public void setAdapter(ElectricSocketAdapter adapter) {        this.adapter = adapter;    }    /**     * @param src 电源, 相对于对于充电器来说     */    public void connect(ElectricSocket src) {        computer.setCharger(charger);        if (adapter == null) {            System.out.println("不需要适配器");            charger.setElectricSocket(src);        } else {            adapter.setElectricSocket(src);            charger.setElectricSocket(adapter);        }    }    /**     * 使用电脑, 开机     */    public void useComputer() {        this.computer.startingUp();    }}

MyHome类

本来用于运行测试.

MyHome代表我家, 假设场景是我家只有一个"两片插口的插座", 

在People类里也提到过, 我的充电器也正好是"两插片"的.

所以我的充电器可以在我家直接使用.

代码如下:

public class MyHome {    /**     * 我家只有两片插口的插座     */    private static final ElectricSocket ELECTRIC_SOCKET = new TwoPlugsElectricSocket();    public static void main(String[] args) {        // 这个People是我        People me = new People();                // 我把电脑连接在我家的插座上        me.connect(ELECTRIC_SOCKET);                // 然后就可以用啦        me.useComputer();    }}

  

接下来演示一下使用适配器时的情况

还是笔记本充电器这个例子.

只是有一天去了Hotel, 然后Hotel里的插座全都是三片插座. 我的"两片插头"的充电器无法直接进行使用.如下如所示:

于是乎, 就搞来了一个适配器, 这个适配器的一头可以插进"三片插座"里, 另一头有"两片插孔"

这样就可以让充电器先插到适配器上, 再把适配器插到三片插座就好了.

ThreePlugsElectricSocket类

三片插座, 如下图所示:

public class ThreePlugsElectricSocket implements ElectricSocket {    @Override    public void supplylEctricity() {        System.out.println("使用[三片]插座供电");    }}

ElectricSocketAdapter类

之前的两片插头的充电器想要使用上面的三片插座来供电的话, 需要一个中间转换器来进行适配. 那就是适配器了.

这里把适配器抽象为一个借口, 代码如下:

public interface ElectricSocketAdapter extends ElectricSocket {    @Override    void supplylEctricity();    void setElectricSocket(ElectricSocket electricSocket);}

TwoPlugsAdapterToThree类

这是一个适配器的实现, 用于适配: 两片插头->三片插座

public class TwoPlugsAdapterToThree implements ElectricSocketAdapter {    private ElectricSocket electricSocket;    @Override    public void setElectricSocket(ElectricSocket electricSocket) {        this.electricSocket = electricSocket;    }    @Override    public void supplylEctricity() {        System.out.println("适配器负责将[两片]转为[三片]");        electricSocket.supplylEctricity();    }}

Hotel类

本来用于运行测试

public class Hotel {    /**     * Hotel只有三片插座     */    private static final ElectricSocket ELECTRIC_SOCKET = new ThreePlugsElectricSocket();    public static void main(String[] args) {        // 这是我        People me = new People();        // 我提前带上了一个适配器        ElectricSocketAdapter adapter = new TwoPlugsAdapterToThree();        // 装备好适配器        me.setAdapter(adapter);        // 连接充电器等各种线        me.connect(ELECTRIC_SOCKET);        // 开始使用电脑        me.useComputer();    }}

 

类关系图如下所示: 

 

转载于:https://www.cnblogs.com/noKing/p/java_design_patterns_Adapter.html

你可能感兴趣的文章
运行百度语音识别官方iOS demo报错: load offline engine failed: 4001
查看>>
THREE.OrbitControls参数控制
查看>>
iOS开发--XMPPFramework--好友列表(五)
查看>>
非对称加密与证书(上篇)
查看>>
面向对象基础
查看>>
poj 1061 青蛙的约会
查看>>
PAT_1008(中文)_数组元素循环右移问题
查看>>
数据库事物隔离级别通俗理解
查看>>
PHP的基本知识点
查看>>
企业IT管理员IE11升级指南【17】—— F12 开发者工具
查看>>
pager-taglib2.0中文传参乱码问题
查看>>
人生不可破的28个天规
查看>>
Protel文件转PADS文件
查看>>
C#中的变量声明
查看>>
iframe中跨域页面访问parent的方法
查看>>
curl实现多路并发请求(请求数量大时再次分割实现循环处理)
查看>>
调查问卷心得体会
查看>>
Linux文件3个时间点(access time,modify time,change time)
查看>>
深谈德国车和日本车的区别--觉得分析的还算冷静客观
查看>>
C#命名空间
查看>>