设计模式之适配器模式(adaptor pattern)

简介: 1 适配器模式的定义在设计模式中,适配器模式(英语:adapter pattern)有时候也称包装样式或者包装(wrapper)。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。2 实际应用中的例子比如我们去日本买了一个日本的电饭煲,但日本电压标准都是110V,而我们国家标

1 适配器模式的定义

在设计模式中,适配器模式(英语:adapter pattern)有时候也称包装样式或者包装(wrapper)。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。

2 实际应用中的例子

  • 比如我们去日本买了一个日本的电饭煲,但日本电压标准都是110V,而我们国家标准是220V,所以要想在中国用日本电饭煲,需要一个电源适配器。
  • 比如我们有一个micro SD卡,如果我们想在笔记本上用,就需要一个读卡器做为适配器
  • JAVA JDK 1.1 提供了 Enumeration 接口,而在 1.2 中提供了 Iterator 接口,想要使用 1.2 的 JDK,则要将以前系统的 Enumeration 接口转化为 Iterator 接口,这时就需要适配器模式。
  • JAVA 中的 jdbc。

3 应用场景

  1. 系统需要使用现有的类,而此类的接口不符合系统的需要。
  2. 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。
  3. 通过接口转换,将一个类插入另一个类系中。(比如老虎和飞禽,现在多了一个飞虎,在不增加实体的需求下,增加一个适配器,在里面包容一个虎对象,实现飞的接口。)

优点:
1. 可以让任何两个没有关联的类一起运行。
2. 提高了类的复用。
3. 增加了类的透明度。
4. 灵活性好。
缺点:
1. 过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。
2. 由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。

4 适配器模式角色

这里写图片描述

5 举例说明

我们就拿日本电饭煲的例子进行说明,日本电饭煲电源接口标准是110V电压,而中国标准电压接口是220V,所以要想在中国用日本电饭煲,需要一个电源转换器。

5.1 定义日本和中国两种接口及其实现

我们先定义日本220V电源接口和实现。

110V接口:

/**
 * 日本110V电源接口
 * */
public interface JP110VInterface {
   public void connect();
}

110V接口实现:

public class JP110VInterfaceImpl implements JP110VInterface {
   public void connect() {
      System.out.println("接通电源,开始工作....");
   }
}

我们再定义中国220V电源接口和实现。

220V接口:

public interface CN220VInterface {
   public void connect();
}

220V接口实现:

public class CN220VInterfaceImpl implements CN220VInterface {
   public void connect() {
      System.out.println("接通电源,开始工作......");
   }
}

5.2 定义一个电压适配器

要想在中国使用日本电饭煲,需要把电饭煲110v的电源接口适配成我们220V的电源接口,这就需要一个电源适配器:

/**
 * 为了能够适配定电饭煲110v电源接口,我们需要继承110v接口
 * */
public class PowerAdaptor implements JP110VInterface {
   private CN220VInterface cn220VInterface;//用220V接口进行适配
   PowerAdaptor(CN220VInterface cn220VInterface){
      this.cn220VInterface=cn220VInterface;
   }
   public void connect() {
      cn220VInterface.connect();
   }
}

适配器继承的是要适配的接口,并持有对客户的接口的引用。

5.3 电饭煲

下面正式开始啦,现在我们有一个日本电饭煲,用的是110v的电源接口:

public class ElectricCooker {
   private JP110VInterface jp110VInterface;//日本电饭煲,用的是日本110V标准电源接口
   ElectricCooker(JP110VInterface jp110VInterface){
      this.jp110VInterface=jp110VInterface;
   }
   public void cook(){
      jp110VInterface.connect();//接通电源
      System.out.println("开始做饭......");
   }
}

电饭煲用的是110V接口

5.4 电饭煲配合适配器工作

测试类:

public class AdaptorTest {
   public static void main(String[] args) {
       CN220VInterface cn220VInterface=new CN220VInterfaceImpl();//中国的220V电源
       PowerAdaptor adaptor=new PowerAdaptor(cn220VInterface);//电源适配器
       ElectricCooker cooker=new ElectricCooker(adaptor);//使用110V接口的电饭煲
       cooker.cook();//使用了适配器,在220V的环境下可以工作啦
   }
}

适配器继承了110V接口,就可以用于日本电饭煲;适配器又持有220V接口的引用,就可以用220V进行工作。

运行结果:

接通电源,开始工作......
开始做饭......
目录
相关文章
|
9月前
|
设计模式 算法 Java
行为型设计模式-策略模式(Strategy Pattern)
行为型设计模式-策略模式(Strategy Pattern)
|
5月前
|
设计模式
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
这篇文章详细解释了工厂模式,包括简单工厂、工厂方法和抽象工厂三种类型。每种模式都通过代码示例展示了其应用场景和实现方法,并比较了它们之间的差异。简单工厂模式通过一个工厂类来创建各种产品;工厂方法模式通过定义一个创建对象的接口,由子类决定实例化哪个类;抽象工厂模式提供一个创建相关或依赖对象家族的接口,而不需要明确指定具体类。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
|
5月前
|
设计模式 Java
设计模式--适配器模式 Adapter Pattern
这篇文章介绍了适配器模式,包括其基本介绍、工作原理以及类适配器模式、对象适配器模式和接口适配器模式三种实现方式。
|
9月前
|
设计模式 算法
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
92 1
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
|
9月前
|
设计模式 安全 Java
【设计模式】JAVA Design Patterns——Curiously Recurring Template Pattern(奇异递归模板模式)
该文介绍了一种C++的编程技巧——奇异递归模板模式(CRTP),旨在让派生组件能继承基本组件的特定功能。通过示例展示了如何创建一个`Fighter`接口和`MmaFighter`类,其中`MmaFighter`及其子类如`MmaBantamweightFighter`和`MmaHeavyweightFighter`强制类型安全,确保相同重量级的拳手之间才能进行比赛。这种设计避免了不同重量级拳手间的错误匹配,编译时会报错。CRTP适用于处理类型冲突、参数化类方法和限制方法只对相同类型实例生效的情况。
|
8月前
|
设计模式
设计模式-05建造者模式(Builder Pattern)
设计模式-05建造者模式(Builder Pattern)
|
9月前
|
设计模式 存储 Java
Java设计模式:解释一下单例模式(Singleton Pattern)。
`Singleton Pattern`是Java中的创建型设计模式,确保类只有一个实例并提供全局访问点。它通过私有化构造函数,用静态方法返回唯一的实例。类内静态变量存储此实例,对外仅通过静态方法访问。
63 1
|
2月前
|
设计模式 前端开发 搜索推荐
前端必须掌握的设计模式——模板模式
模板模式(Template Pattern)是一种行为型设计模式,父类定义固定流程和步骤顺序,子类通过继承并重写特定方法实现具体步骤。适用于具有固定结构或流程的场景,如组装汽车、包装礼物等。举例来说,公司年会节目征集时,蜘蛛侠定义了歌曲的四个步骤:前奏、主歌、副歌、结尾。金刚狼和绿巨人根据此模板设计各自的表演内容。通过抽象类定义通用逻辑,子类实现个性化行为,从而减少重复代码。模板模式还支持钩子方法,允许跳过某些步骤,增加灵活性。
141 11
|
3月前
|
设计模式 安全 Java
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
|
24天前
|
设计模式
「全网最细 + 实战源码案例」设计模式——模式扩展(配置工厂)
该设计通过配置文件和反射机制动态选择具体工厂,减少硬编码依赖,提升系统灵活性和扩展性。配置文件解耦、反射创建对象,新增产品族无需修改客户端代码。示例中,`CoffeeFactory`类加载配置文件并使用反射生成咖啡对象,客户端调用时只需指定名称即可获取对应产品实例。
87 40

热门文章

最新文章