博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式(12)-适配器模式详解(易懂)
阅读量:6372 次
发布时间:2019-06-23

本文共 1765 字,大约阅读时间需要 5 分钟。

适配器模式的定义

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

对象适配器模式

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

类适配器模式

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

模型:

  • 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.注意:

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

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


另外可以加入我的Android技术交流群:458739310 大家可以关注我的微信公众号:「安卓干货铺」一个有质量、有态度的公众号!

转载地址:http://wcyqa.baihongyu.com/

你可能感兴趣的文章
GCD之并行串行区别
查看>>
PHP哈希表碰撞攻击
查看>>
linux根目录下文件夹概览
查看>>
深入了解回调函数Java
查看>>
常用的linux系统监控命令
查看>>
Basic Calculator II
查看>>
CorePlot学习
查看>>
数字在排序数组中出现的次数
查看>>
JavaScript权威设计--JavaScript函数(简要学习笔记十一)
查看>>
Chapter 2 User Authentication, Authorization, and Security(3):保server避免暴力袭击
查看>>
BIEE 创建一个简单的分析(2)
查看>>
Linux内核的整体架构
查看>>
windows(64位)下用vagrant+virtualbox 管理虚拟机具体解释
查看>>
跳台阶
查看>>
反编译 APKTool 逆向助手
查看>>
深入理解PHP内核(九)变量及数据类型-静态变量
查看>>
Android探索之ContentProvider熟悉而又陌生的组件
查看>>
SSH框架优势
查看>>
Python中的图形库
查看>>
postgresql 数据库的备份和恢复 (pg_dump 和 pg_restore)
查看>>