每天学习一个设计模式-3.适配器模式

适配器模式的本质是:转换匹配,复用功能

一、适配模式的定义:

将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

适配器通过转换调用已有的实现,从而能把已有的实现匹配成需要的接口,使之能满足客户端的需要。也就是说转换匹配是手段,而复用已有的功能才是目的。

在进行转换匹配的过程中,适配器还可以在转换调用的前后实现一些功能处理,也就是实现智能的适配。

适配器模式类图

二、应用场景

适配器在生活中很常见,比如双孔插座转换成三孔插座、笔记本电脑上的电源将220V电压转换成笔记本可用的电压等。

在以下情况要以使用适配器模式:
1)希望使用某些现有类,但其接口其他代码不兼容时;
2)希望重用几个现有的子类,这些子类缺少一些不能添加到超类中的公共功能时。

三、适配器模式示例

假设客户端一直使用的两孔插座,现在要改为使用三孔插座,下面用代码进行示例:

1、两孔插座模拟类

public class TwoHole {
    public void use() {
        System.out.println("使用两孔插座");
    }
}

2、客户端类

public class Client {

    // 两孔插座
    private TwoHole twoHole = new TwoHole();

    /**
     * 使用插座
     */
    public void use() {
        twoHole.use();
    }

    public static void main(String[] args) {

        Client client = new Client();
        client.use();
    }
}

运行结果 :
运行结果

现在需要使用三孔插座,改造如下:
1、适配器接口

public interface Adapter {

    /**
     * 使用两孔插座
     * */
    void useTwoHole();

    /**
     * 使用三孔插座
     */
    void useThreeHole();
}

2、适配器实现

public class ThreeHoleAdapter implements Adapter {

    // 包含两孔插座
    private TwoHole twoHole;

    public ThreeHoleAdapter(TwoHole twoHole) {
        this.twoHole = twoHole;
    }

    @Override
    public void useTwoHole() {

        // 使用两孔插座
        this.twoHole.use();
    }

    @Override
    public void useThreeHole() {
        System.out.println("使用三孔插座");
    }
}

3、客户端类改造

public class Client1 {

    // 两孔插座
    private TwoHole twoHole = new TwoHole();

    // 三孔插座适配器
    private Adapter adapter = new ThreeHoleAdapter(twoHole);


    /**
     * 使用插座
     */
    public void use() {

        // 使用两孔插座
        adapter.useTwoHole();

        // 使用三孔插座
        adapter.useThreeHole();
    }

    public static void main(String[] args) {

        Client1 client = new Client1();
        client.use();
    }
}

改造后的客户端类可以自由地选择是使用两孔插座还是三孔插座。

四、适配器模式的优缺点

优点:

1)更好的复用性;
2)更好的扩展性,如果以后需要支持四孔插座,则扩展适配器即可。

缺点:

过多地使用适配器,会让系统非常零乱。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 目录 本文的结构如下: 什么是适配器模式 为什么要用该模式 模式的结构 代码示例 优点和缺点 适用环境 模式应用 ...
    w1992wishes阅读 4,400评论 0 3
  • 菜鸟版JAVA设计模式—适配器模式,装饰模式,代理模式异同 一、概念 适配器模式,允许因为接口不兼容而不能在一起工...
    合肥黑阅读 12,480评论 3 14
  • 这篇文章讲的是适配器模式,适配器模式其实在我们日常生活中就有许许多多的例子例如插座转接头 车载充电器 介绍 适配器...
    东西的南北阅读 2,435评论 0 1
  • 一、前言 适配器在生活中非常常见。比如去香港玩,香港是英式三孔插座,为了能兼容大陆版的手机充电器,需要买个适配器,...
    more2023阅读 1,605评论 0 3
  • 问题:在应用程序中,我们可能会使用一个在体系结构上可靠稳定的工作代码库。不过,我们常常会添加新的功能,这些功能要求...
    蓝洛333阅读 2,629评论 0 0