详解设计模式:适配器模式
创始人
2024-04-14 05:05:40
0

适配器模式(Adapter Pattern)又称为变压器模式,是 GoF 的 23 种设计模式中的一种结构型设计模式。适配器模式 的功能是将一个类的接口变成客户端所期望的另一种接口,从而使原本因接口不匹配而导致无法在一起工作的两个类能够一起工作

~

本篇内容包括:关于适配器模式、适配器的实现 Demo


文章目录

    • 一、关于适配器模式
        • 1、关于适配器模式
        • 2、关于适配器模式的构成
        • 3、关于适配器模式的UML
        • 4、关于适配器类
        • 5、关于适配器模式的优缺点
    • 二、适配器的实现 Demo
        • 1、Demo 设计
        • 2、Demo 实现
        • 3、Demo 测试


一、关于适配器模式

1、关于适配器模式

适配器模式(Adapter Pattern)又称为变压器模式,是 GoF 的 23 种设计模式中的一种结构型设计模式。

适配器模式 的功能是将一个类的接口变成客户端所期望的另一种接口,从而使原本因接口不匹配而导致无法在一起工作的两个类能够一起工作

2、关于适配器模式的构成

适配器模式一般包含三种角色:

  1. 目标(Target):目标是一个接口,该接口是客户想要使用的接口。
  2. 被适配者(Adaptee):被适配者是一个已经存在的接口或抽象类,这个接口或抽象类需要被适配。
  3. 适配器(Adapt):适配者是一个类,该类实现了目标接口并包含有适配者的引用,即适配者的职责是对被适配者接口(抽象类)与目标接口进行适配。

3、关于适配器模式的UML

适配器模式

4、关于适配器类

public class Adapter extends Adaptee implements Target{@Overridepublic void request() {//...一些操作...super.adapteeRequest();//...一些操作...}
}

5、关于适配器模式的优缺点

# 适配器模式优点

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

# 适配器模式缺点

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

# 使用场景

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

二、适配器的实现 Demo

1、Demo 设计

我们新买了一个华为 mate50 手机,但是来朋友家做客没携带充电器,朋友家只有 Ios 的充电器,所以我们需要让 Ios 充电接口支持我们的 mate50 的 Type-C 充电。

2、Demo 实现

# TypeCharger 目标(Target)

/*** Type-c充电接口**/
public interface TypecCharger {/*** 充电方法*/void typecCharger();
}/*** Type-c充电**/
public class Typec implements TypecCharger {@Overridepublic void typecCharger() {System.out.println("Type-c接口充电");}
}

# IosCharger 被适配者(Adaptee)

/*** Ios充电接口**/
public interface IosCharger {/*** 充电方法*/void iosCharger();
}/*** Ios充电**/
public class Ios implements IosCharger {@Overridepublic void iosCharger() {System.out.println("Ios接口充电");}
}

# FriendHome

/*** 在朋友家充电(只有Ios充电口)**/
public class FriendHome {private IosCharger iosCharger;public FriendHome(IosCharger iosCharge) {this.iosCharger = iosCharge;}/*** 充电*/public void charge(){this.iosCharger.iosCharger();}
}

# ChargerAdapter 适配器(方式一)

/*** 适配器接口**/
public class ChargerAdapter implements IosCharger {private TypecCharger typec;public ChargerAdapter(Typec typec) {this.typec = typec;}@Overridepublic void iosCharger() {typec.typecCharger();}
}

# ChargerAdapter 适配器(方式二)

public class ChargerAdapter extends Typec implements IosCharger {@Overridepublic void iosCharger() {this.typecCharger();}}

3、Demo 测试

public class Client {public static void main(String[] args) {// 原本只有 Ios 充电口FriendHome home = new FriendHome(new Ios());home.charge();System.out.println("*******************");// 使用适配器之后旅馆支持ios充电了ChargerAdapter chargerAdapter = new ChargerAdapter(new Typec());home = new FriendHome(chargerAdapter);home.charge();}}

相关内容

热门资讯

宇树科技被起诉,什么原因? 涉及侵权责任纠纷案件 投资时间网、标点财经快讯 天眼查法律诉讼信息显示,近日,杭州宇树科技股份有限公...
惠城环保:已制定《市值管理制度... 证券之星消息,惠城环保(300779)12月31日在投资者关系平台上答复投资者关心的问题。 投资者提...
看2026|和尔解王倩:降低调... 站在“十五五”新程待启的关键时点,如何看待2026年的经济形势?2026年经济工作怎么干?新京报贝壳...
奇瑞汽车申请满足软件升级法规要... 国家知识产权局信息显示,奇瑞汽车股份有限公司申请一项名为“一种满足软件升级法规要求的升级测试优化方法...
国台办:公安机关发布悬赏通告并... 12月31日上午,国台办在新闻发布厅举行例行新闻发布会,发言人张晗就近期两岸热点问题回答记者提问。 ...
元旦前发布这种朋友圈,他们面临... 元旦即将到来 不少人想买点烟花爆竹 增添节日氛围 朋友圈里也出现了 各种烟花爆竹的广告 但你知道吗 ...
“护航”增值税法顺利实施 配套... 新华社北京12月31日电 《经济参考报》12月31日刊发记者韦夏怡采写的文章《“护航”增值税法顺利实...
《山东省行政调解办法》5月1日... 在我们的日常生活中,难免会遇到各种纠纷,调解作为重要的纠纷解决方式,在维护群众权益方面发挥了重要作用...
上海发文推进老年人意定监护制度... 12月31日,上海市政府官网发布《上海市人民政府办公厅关于推进实施老年人意定监护制度的若干意见(试行...