设计模式-适配器模式

这篇文章讲的是适配器模式,适配器模式其实在我们日常生活中就有许许多多的例子
例如插座转接头


这里写图片描述

车载充电器


这里写图片描述

还有许许多多其他的,我就不一一介绍了。其实设计模式中和真实世界中的适配器的作用都是一样的,都是讲一个结构转换成另一个接口,以达到我们希望的结果。

介绍

适配器模式(Adapter Pattern## 标题 ##)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。适配器模式将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
适配器模式有两种类型:类适配器模式和对象适配器模式。因为类适配器需要通过多重继承进行适配,而JAVA又不支持多重继承,所以这里主要讲对象适配器,简单介绍类适配器。

结构图

对象适配器

这里写图片描述

类适配器

这里写图片描述

时序图

这里写图片描述

案例

这里就用插座转接头做案例。
当插座上只有一个三孔插座,而我们的手机充电器是两孔的,这时该怎么办你?这时候我们就需要用一个两孔插座转三孔插座的适配器来适配了。如下图


图片来源于Head First 设计模式

充电器类

public class Charger{
    public void request(){
        System.out.println("我是两孔插座的充电器!");
    }
}

插座接口

public interface Adaptee {
    void transaledRequest();
}

三孔插座类

public class ThreeAdaptee implements Adaptee{
    public void transaledRequest(){
        System.out.println("插入三孔插座!");
    }
}

适配器类

public class Adapter extends Charger {
    private Adaptee adaptee;
    
    public Adapter(Adaptee adaptee) {
        super();
        this.adaptee = adaptee;
    }

    @Override
    public void request() {
        super.request();
        System.out.println("两孔转三孔!"); 
        adaptee.transaledRequest();
    }
    
}

测试类

public class Client {
    public static void main(String[] args) {
        ThreeAdaptee adaptee = new ThreeAdaptee();
        Adapter adapter = new Adapter(adaptee);
        adapter.request();
    }
}

测试结果

这里写图片描述

代码见Github地址
总结
--
适配器模式的主要优点是将目标类和适配者类解耦,增加了类的透明性和复用性,同时系统的灵活性和扩展性都非常好,更换适配器或者增加新的适配器都非常方便,符合“开闭原则”;类适配器模式的缺点是适配器类在很多编程语言中不能同时适配多个适配者类,对象适配器模式的缺点是很难置换适配者类的方法。
在类适配器模式中,适配器类实现了目标抽象类接口并继承了适配者类,并在目标抽象类的实现方法中调用所继承的适配者类的方法;在对象适配器模式中,适配器类继承了目标抽象类并定义了一个适配者类的对象实例,在所继承的目标抽象类方法中调用适配者类的相应业务方法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 目录 本文的结构如下: 什么是适配器模式 为什么要用该模式 模式的结构 代码示例 优点和缺点 适用环境 模式应用 ...
    w1992wishes阅读 4,436评论 0 3
  • 前言 买过港版手机的都知道,包装盒里送的充电头是港标的。和我们大陆日常使用的国标是不兼容的。也就是说,港版手机直接...
    soberbad阅读 3,738评论 0 4
  • 定义 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在...
    步积阅读 5,371评论 0 1
  • 一 概述 定义:适配器模式将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能...
    时待吾阅读 3,434评论 0 0
  • 原文地址:LoveDev 适配器模式(Adapter Pattern):将一个接口转换成调用者希望的另一个接口,使...
    KevinLive阅读 2,166评论 0 0

友情链接更多精彩内容