Adapter - 适配器模式

  现实生活中,我们常用到适配器。

  你当前打开我这篇文章的笔记本电脑,电源的另一边不正连着一块适配器吗?

  你平时想将三口插座插进二口插座里面,不也需要一个适配器吗?

  整天插在插座上的手机充电头,不也是一个适配器吗?

目录

  • 第一种:类适配器(使用继承)
  • 第二种:对象适配器(使用委托)
  • 抽象的 UML 类图

第一种:类适配器(使用继承)

  这里,我假设家用功率为 220v,经过适配器,输出为 18v,可供我的笔记本进行使用。

  类图

  Portal(入口) 类:只有一个方法 Input(),来表示输入的电流功率。

  IOutput(输出)接口:只有一个方法 Output(),来表示经过转换后输出的电流功率。

  Adapter(适配器)类:实现了 IOutput 接口。

  Portal.cs 类

     /// <summary>
/// 入口
/// </summary>
class Portal
{
private readonly string _msg; public Portal(string msg)
{
_msg = msg;
} /// <summary>
/// 输入(电流)
/// </summary>
public void Input()
{
Console.WriteLine(_msg + " --> 18v。");
}
}

  

  IOutput.cs 接口

     interface IOutput
{
/// <summary>
/// 输出(电流)
/// </summary>
void Output();
}

  Adapter.cs 类

     /// <summary>
/// 适配器
/// </summary>
class Adapter : Portal, IOutput
{
public Adapter(string msg) : base(msg)
{
} public void Output()
{
Input();
}
}

  Client.cs 类

     class Client
{
static void Main(string[] args)
{
IOutput adapter = new Adapter("220v");
adapter.Output(); Console.Read();
}
}

  客户端在使用的过程中,我们只知道输出的结果即可,内部实现不需要理会。

第二种:对象适配器(使用委托)

  委托:自己不想做的事,交给第三方去做。

  类图

  Portal.cs 类

     /// <summary>
/// 入口
/// </summary>
class Portal
{
private readonly string _msg; public Portal(string msg)
{
_msg = msg;
} public void Input()
{
Console.WriteLine(_msg + " --> 18v");
}
}

  Adapter.cs 类

     class Adapter : Export
{
private readonly Portal _portal; public Adapter(string msg)
{
_portal = new Portal(msg);
} public override void Output()
{
_portal.Input();
}
}

  Export.cs 类

     /// <summary>
/// 出口
/// </summary>
abstract class Export
{
public abstract void Output();
}

抽象的 UML 类图

  4 种角色:Adaptee(被适配),Adapter(适配者),Client(使用场景),Target(目标对象)。

  Adaptee(被适配):不是 -er 结尾的哦,之前的 Portal(入口)类作为被适配者。

  Adapter(适配者):作为 Adaptee 和 Target 的媒介,进行调节。

  Client(使用场景):一个调用的入口,以 Main() 作为入口函数。

  Target(目标对象):调节(适配)后的输出,之前的 IOutput 接口和 Export 类都是作为 Target 对象。

图:类适配器(使用继承)

图:对象适配器(使用委托)

C# 设计模式系列

  《Iterator - 迭代器模式:我与一份奥利奥早餐的故事


【博主】反骨仔

【原文】http://www.cnblogs.com/liqingwen/p/6560899.html

[C# 设计模式] Adapter - 适配器模式(两种)的更多相关文章

  1. 一天一个设计模式——Adapter适配器模式(Wrapper模式)

    一.模式说明 在现实生活中,当需要将两种设备连接起来,但是两个设备的接口规范又不一致(比如电脑上只有Type-C接口,但是你的显示器是HDMI接口),这时候就需要一个适配器,适配器一端连接电脑,一端连 ...

  2. C++设计模式-Adapter适配器模式

    Adapter适配器模式作用:将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 分为类适配器模式和对象适配器模式. 系统的数据和 ...

  3. C++设计模式-Adapter适配器模式(转)

    Adapter适配器模式作用:将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 分为类适配器模式和对象适配器模式. 系统的数据和 ...

  4. C#设计模式(7)——适配器模式(Adapter Pattern)

    一.引言 在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象.那么如果将“将现存的对象”在新的环境中进行调用 ...

  5. C#设计模式(7)——适配器模式(Adapter Pattern)(转)

    一.引言 在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象.那么如果将“将现存的对象”在新的环境中进行调用 ...

  6. 设计模式之适配器模式(Adapter)(6)

    简介 在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象.那么如果将“将现存的对象”在新的环境中进行调用呢? ...

  7. java_设计模式_适配器模式_Adapter Pattern(2016-08-09)

    概念 将一个接口转换成客户希望的另外一个接口.(该模式使得原本不兼容的类可以一起工作). UML图 适配器模式有类的适配器模式和对象的适配器模式两种不同的形式. (1)对象的适配器模式结构图 (2)类 ...

  8. java设计模式之——适配器模式

    适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 适配器模式的用途 用电器做例子,笔记本电脑的插头一般都是三相的,即除了阳极.阴极 ...

  9. Java设计模式----初识适配器模式

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

随机推荐

  1. 201771010118 马昕璐 《面向对象设计 java》第十七周实验总结

    1.实验目的与要求 (1) 掌握线程同步的概念及实现技术: (2) 线程综合编程练习 2.实验内容和步骤 实验1:测试程序并进行代码注释. 测试程序1: l 在Elipse环境下调试教材651页程序1 ...

  2. docker 数据卷管理

    在生产环境中使用docker,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这涉及到容器对数据管理的操作 容器对数据的管理主要有两种方式: 数据卷(Data Volumes): 容器内 ...

  3. 约瑟夫环问题 --链表 C语言

    总共有m个人在圆桌上,依次报名,数到第n个数的人退出圆桌,下一个由退出人下一个开始继续报名,循环直到最后一个停止将编号输出 #include <stdio.h>#include <s ...

  4. 百度AI

    官网:http://ai.baidu.com/tech/face SDK:https://ai.baidu.com/sdk#bfr API说明 百度Face SDK Android 版是一种面向 An ...

  5. 给ASP.NET Core Web发布包做减法

    1.引言 紧接上篇:ASP.NET Core Web App应用第三方Bootstrap模板.这一节我们来讲讲如何优化ASP.NET Core Web发布包繁重的问题. 在ASP.NET Core W ...

  6. vue项目实践-添加express-mockjs进行数据模拟

    mock-server 在新项目开始的时候,后端框架还没有,前端就有能够自己操作的模拟数据的服务是可以有的 express-mockjs 是楼教主结合 express+mock-lite 造的一个轮子 ...

  7. 产品经理教你如何构建电商电销 CRM 系统

    在电销或网销行业中老板们会经常问到,上个月渠道投放花了多少钱,来了多少量,转化率怎么样,获得了多少新线索,获客成本如何,销售额是多少? 劈天盖地的各种数据需求飞来,没有一个像样的系统该如何是好?这时候 ...

  8. JS 将表格table导出excel

    function tableToExcel(id) { var tb = document.getElementById(id); var html = '<html><head&g ...

  9. awk小例子_2_数值统计脚本

    通信公司工作,经常处理各种协议接口,在统计协议接口字段内容时,需要统计字段填写的内容是否正确,和占比是多少.要是单次统计,估计会把人累死,写个脚本统计,轻松便捷. 举例:接口内容 这是一条话单,这样的 ...

  10. Ubuntu12.04下安ns-3.29及Ubuntu换源方法

    目录 1.下载ns-3.29 2.安装gcc-4.9.2 3.编译.测试ns-3.29 第一种:更新,文章开头说的 第二种,更新源 主机型号:Ubuntu12.04 仿真环境版本:NS-3.29 安装 ...