`
安卓干货铺
  • 浏览: 36202 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

设计模式(12)-适配器模式详解(易懂)

阅读更多

适配器模式的定义

在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。

共有两类适配器模式:

对象适配器模式

  • 在这种适配器模式中,适配器容纳一个它包裹的类的实例。在这种情况下,适   配器调用被包裹对象的物理实体。

类适配器模式

  •  -- 这种适配器模式下,适配器继承自已实现的类。

模型:

 

  • Target:目标角色,定义把其他类转换为我们期望的角色

  • Adaptee:初始角色,即我们原始的类和接口对象,如“A->B”,其中    A就是初始角色,它是一直存在的

  • Adapter:适配器角色,也就是我们今天的重点,适配器需要新创建,通过继承等方式把初始角色转换成为目标角色。

代码演示(类适配器模式):

1.AbstractTarget:抽象目标角色

public interface AbstractTarget {
   //抽象目标角色方法
   public void target();
}

2.具体的目标角色

public class Target implements AbstractTarget {
   @Override
   public void target() {
       Log.d("qzs","实现目标方法");
   }
}

3.初始角色Adaptee:

public class Adaptee {
   //初始的方法
   public void adaptee(){
       Log.d("qzs","初始的逻辑");
   }
}

4.适配器角色:

public class Adapter extends Adaptee implements AbstractTarget {
   @Override
   public void target() {
      adaptee();
   }
}

5.调用

AbstractTarget tr=new Adapter();      
  tr.target();

实例说明

例如,我手中有Android数据线和iphone手机,我想用安卓数据线给iphone手机充电。此时:

  • 初始角色:Android数据线

  • 目标角色:iphone手机

  • 适配器:数据线转换器

代码演示:

1.Android数据线:

 

public class AndroidLine {
   public  void  charge(){
       Log.d("qzs","Android数据线给Android手机充电");
   }
}

 

2.目标角色:

public interface AbstractIphone {
   public  void  target();
}

 

3.数据线转换器

public class PhoneLineAdapter extends AndroidLine implements  AbstractIphone {
   @Override
   public void target() {
       super.charge();
       Log.d("qzs","但是我可以通过数据线转换器来给iphone手机充电");
   }
}

 

4.调用

AbstractIphone tr1=new PhoneLineAdapter();
       tr1.target();

运行:

适配器模式的优点及其他

1.优点

  • 灵活性好

  • 通过适配器可以让两个没有关系的类一起运行

  • 增加了类的通透性

2.注意:

当初始角色的接口和实现类为多个时,我们在写适配器不能用继承的方式。可以通过在适配器中构造函数的方法来传递对象从而实现数据处理,也就是对象适配器模式。

文章参考了网上信息以及《设计模式之禅》

0
0
分享到:
评论

相关推荐

    23种设计模式(通俗易懂篇)

    ### 23种设计模式(通俗易懂篇) #### 创建型模式 1. **Factory(工厂模式)** - **应用场景**:当你需要为用户提供多种选择时,例如选择不同的餐厅来满足不同用户对食物的偏好。 - **原理**:在工厂模式中,...

    详解适配器与外观模式

    适配器模式与外观模式是两种常见的设计模式,它们都能够对已有的系统接口进行改进,以提高系统的可用性、灵活性以及可维护性。 首先,让我们来深入了解Facade模式。Facade模式(外观模式)的意图是提供一个统一的...

    java设计模式的 3本书 1 ppt

    首先,"深入浅出设计模式(中文版)-93页.pdf"很可能是一本简洁易懂的设计模式入门书籍,虽然只有93页,但可能包含了设计模式的基础概念、核心思想以及常见模式的实例解析。这本书可能会涵盖一些基础模式,如单例模式...

    java与模式-清晰书签版

    《Java与模式-清晰书签版》是一份包含多种Java设计模式详解的资源包,旨在帮助开发者深入理解和应用设计模式。这份资源集成了多种格式的文档,包括详细的文本描述、图表解析以及实际代码示例,使得学习过程更加直观...

    深入浅出的设计模式

    在本书中,"HEAD_FIRST设计模式(中文版)"采用了易懂且生动的方式,将复杂的概念以图文并茂的形式呈现,使得读者能够更轻松地理解和掌握设计模式。以下是对几个关键设计模式的详解: 1. **工厂模式**:它是创建型...

    23种设计模式

    ### 23种设计模式详解 #### 一、Abstract Factory(抽象工厂模式) **定义**:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 **应用场景**:当系统需要创建一组相关的产品对象时,使用...

    设计模式面试题.pdf

    ### 设计模式基础概念 **设计模式**是一种在软件工程领域广泛应用的概念,它是指一系列被广泛接受、经过验证的问题解决方案的归纳与总结。通过使用设计模式,开发者能够编写出更易于理解和维护的代码,同时也提高了...

    Thinking in Pattern

    作为一本专注于设计模式的书籍,《Thinking in Patterns》通过丰富的示例和详细的解释帮助读者理解如何利用设计模式来解决实际问题。 #### 二、设计模式概述 设计模式是一种在特定上下文中解决常见问题的方法论。...

    Software Architecture Design Pattern In Java

    Java设计模式的学习资源众多,而本书的特点在于其简单易懂,特别适合初学者。这主要体现在以下几个方面: 1. **清晰的概念解释**:书中对每一个设计模式都进行了详细的定义与说明,确保读者能够准确理解每个概念。 ...

    23个软件设计类图详解.rar

    很适合初学软件设计模型,总结的很全,简单通俗易懂 5个创建模式: 1、Abstract Factory 抽象工厂 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 2、Builder 生成器 将一个复杂对象的...

    JavaEE技面试常见问题.doc

    工厂模式是一种常用的创建型设计模式,用于创建对象而不暴露创建逻辑,它使用一个共同的接口来指向新创建的对象。 - **如何使用**:定义一个创建产品对象的工厂接口,将实际的产品对象创建延迟到子类中。 ```java ...

    eNSP华为模拟器使用详解

    【eNSP华为模拟器使用详解】 eNSP(Enterprise Network Simulation Platform)是华为公司推出的一款强大而免费的网络设备仿真平台,专为企业级网络设计,涵盖了路由器、交换机、WLAN等多种网络设备的模拟。它允许...

    《C#基础与案例开发详解》光盘代码【9】

    这在设计模式中尤其重要,如策略模式和适配器模式。 4. **泛型**:泛型是C#的一个强大特性,它允许创建可重用的类型安全的代码,可以应用于多种数据类型。在第九章中,你可能会学到如何使用泛型类、泛型方法和泛型...

    spring-mvc 项目

    - **HandlerAdapter**:适配器模式用于处理各种不同类型的控制器,确保 DispatcherServlet 可以与任何类型的控制器协作。 2. **工作流程** - 用户发送 HTTP 请求到服务器。 - DispatcherServlet 接收到请求后...

    VCDS-ZHS-12.12.0

    《VCDS-ZHS-12.12.0:大众汽车诊断系统详解》 VCDS,全称为Volkswagen CAN Diagnostics System,是专为大众汽车集团车型设计的一款强大而全面的诊断工具。该系统的核心在于其软件版本,即我们讨论的"VCDS-ZHS-...

    SUPERPRO500P使用书

    SUPERPRO500P是一款高效、可靠的通用编程器,专为基于奔腾处理器的IBM兼容台式机或笔记本电脑设计。它通过USB2.0端口直接与计算机通信,提供了直观的菜单驱动接口,使得操作变得极为便捷。这款编程器适用于多种类型...

    松下PLC编程软件GTWIN2.2

    该软件提供了三种编程模式,包括直观易懂的梯形图模式、逻辑图模式以及指令模式,以满足不同用户的需求和编程习惯。 梯形图模式是PLC编程中最常见的表示方式,其逻辑结构清晰,便于理解和操作,适合初学者入门;...

    电赛历年试题.docx

    ### 电赛历年试题知识点详解 #### 一、电赛概览 - **定义与意义**:电赛,即电子设计竞赛,是一项旨在检验电子与信息技术领域学生创新能力及实践技能的重要赛事。它不仅考验学生的专业知识水平,还着重考察其实战...

    speedphp的工具包

    - **数据库支持**:SpeedPHP通常支持多种数据库,如MySQL、SQLite等,通过适配器模式实现数据库操作的统一接口。 - **视图渲染**:使用模板引擎处理视图输出,允许开发者分离业务逻辑和表现层。 - **安全防护**:...

Global site tag (gtag.js) - Google Analytics