适配器模式

知识点七: 适配器模式


一、概述

适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。它属于23种GOF设计模式的结构型设计模式 , 它结合了两个独立接口的功能。

这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。

适配器模式的别名为包装器(Wrapper)模式,它既可以作为类结构型模式,也可以作为对象结构型模式。在适配器模式定义中所提及的接口是指广义的接口,它可以表示一个方法或者方法的集合。


二、优缺点和使用场景

1、优点

  • 可以让任何两个没有关联的类一起运行。
  • 提高了类的复用。
  • 增加了类的透明度。
  • 灵活性好。

2、缺点

  • 过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。
  • 由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。

3、使用场景

  • 有动机地修改一个正常运行的系统的接口,这时应该考虑使用适配器模式。

三、模式中包含的角色和其职责

1、角色

**目标抽象(Target)角色:**目标抽象类定义客户所需的接口,可以是一个抽象类或接口,也可以是具体类。

**适配器(Adapter)角色:**它可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配。它是适配器模式的核心。

**适配者(Adaptee)角色:**适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类包好了客户希望的业务方法。


四、在Java中的实现

目标:我们平时用的电流都是220V的电,现在我的客户端(MainClass.java)只能用180V的电,使用适配器改变用电模式

平时用的电

Current.java

public class Current {
    public void use220V(){
        System.out.println("使用220V电流");
    }
}

1、通过继承实现

适配器模式_继承.png

适配器Adapter.java

/**
 * @Description: 适配器类
 * @Author: Ling.D.S
 * @Date: Created in 2018/11/12 19:52
 */
public class Adapter extends Current {
    public void use180V(){
        System.out.println("使用适配器");
        this.use220V();
    }
}

客户端MainClass.java

/**
 * @Description:
 * @Author: Ling.D.S
 * @Date: Created in 2018/11/12 19:49
 */
public class MainClass {
    public static void main(String[] args) {
        Adapter adapter = new Adapter();
        adapter.use180V();
    }
}

2、通过委任(组合)实现

适配器模式_委任.png

适配器Adapter.java

/**
 * @Description:
 * @Author: Ling.D.S
 * @Date: Created in 2018/11/12 20:05
 */
public class Adapter {
    private Current current;

    public Adapter(Current current) {
        this.current = current;
    }

    public void user180V(){
        System.out.println("使用适配器");
        this.current.use220V();
    }
}

客户端MainClass.java

/**
 * @Description:
 * @Author: Ling.D.S
 * @Date: Created in 2018/11/12 20:08
 */
public class MainClass {
    public static void main(String[] args) {
        Adapter adapter = new Adapter(new Current());
        adapter.user180V();
    }
}

扫描关注下面二维码获得更多有用的资源!
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值