C# 设计模式巩固笔记 - 适配器模式
前言
多读书、多学习
介绍-适配器模式
定义:适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
实现
这里有大家生活中常见的例子,作为一名程序员。看到适配器我首先想到的就是我们常用的笔记本的电源适配器。大家都知道笔记本是无法直接接入220V的电压的,一般笔记本支持的就是16 - 22V的电压,这个就是电源适配器的输出的电压。

下面就通过适配器模式来实现这个过程。
1.定义一个220V电压的接口,由我们的插座来实现:
/// <summary>
/// 220V电源插口
/// </summary>
public interface ISoketPowerWith200V
{
/// <summary>
/// 输出电压
/// </summary>
/// <returns></returns>
int OutPutVoltage();
}
/// <summary>
/// 电源
/// </summary>
public class Socket : ISoketPowerWith200V
{
/// <summary>
/// 输出电压
/// </summary>
/// <returns></returns>
public int OutPutVoltage()
{
return ;
}
}
2.需要一个输出电压的接口:
/// <summary>
/// 20V电压插口
/// </summary>
public interface ISoketPowerWith20V
{
/// <summary>
/// 输出电压
/// </summary>
/// <returns></returns>
int OutPutVoltage();
}
3.看下笔记本类,笔记本提供了20V电压的插口:
/// <summary>
/// 笔记本电脑
/// </summary>
public class LapTop
{
/// <summary>
/// 构造函数
/// </summary>
public LapTop()
{ }
/// <summary>
/// 接入电源适配器
/// </summary>
/// <param name="powerAdapter">电源适配器</param>
public void SetPowerAdapter(ISoketPowerWith20V powerAdapter)
{
PowerAdapter = powerAdapter;
Request20V();
}
/// <summary>
/// 电源适配器 - 输出电压 20V
/// </summary>
public ISoketPowerWith20V PowerAdapter { get; set; }
/// <summary>
/// 需要20V电压
/// </summary>
public void Request20V()
{
int voltage = PowerAdapter.OutPutVoltage();
Console.WriteLine("开始检测输入电压是否正确...");
if (voltage == )
Console.WriteLine("输入电压正确!");
else
Console.WriteLine("输入电压错误!");
}
}
4.这个20V的电源如何实现呢,下面就是我们的适配器出场了:
/// <summary>
/// 电源适配器类
/// </summary>
public class PowerAdapter : ISoketPowerWith20V
{
/// <summary>
/// 220V插座
/// </summary>
ISoketPowerWith200V _socket;
public PowerAdapter()
{
}
/// <summary>
/// 接入电源
/// </summary>
/// <param name="socket">插座</param>
public void SetSocket(ISoketPowerWith200V socket)
{
this._socket = socket;
}
/// <summary>
/// 输入电压
/// </summary>
/// <returns></returns>
public int OutPutVoltage()
{
int voltage = _socket.OutPutVoltage();
return Switch(voltage);
}
/// <summary>
/// 转换电压
/// </summary>
/// <param name="voltage">输入电压</param>
/// <returns>输出电压</returns>
private int Switch(int voltage)
{
Console.WriteLine("接入{0}V电压,开始转换...",voltage);
Console.WriteLine("转换电压完成!");
return ;
}
}
电源适配器接入220V电压,然后通过转换输出20V的电压。
5.最后看调用:
class Program
{
static void Main(string[] args)
{ //1.拿出笔记本
LapTop lapTop = new LapTop();
//2.拿出适配器
PowerAdapter adapter = new PowerAdapter();
//3.找到一个插头
Socket socket = new Socket();
//4.适配器接入电源
adapter.SetSocket(socket);
//5.接入适配器
lapTop.SetPowerAdapter(adapter); Console.Read();
}
}
结果:

欢迎批评指正,转载请注明出处 http://www.cnblogs.com/xinwang/p/6425189.html
C# 设计模式巩固笔记 - 适配器模式的更多相关文章
- 设计模式之笔记--适配器模式(Adapter)
适配器模式(Adapter) 定义 适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 适配器模式 ...
- 7 种 Javascript 常用设计模式学习笔记
7 种 Javascript 常用设计模式学习笔记 由于 JS 或者前端的场景限制,并不是 23 种设计模式都常用. 有的是没有使用场景,有的模式使用场景非常少,所以只是列举 7 个常见的模式 本文的 ...
- HeadFirst设计模式读书笔记--目录
HeadFirst设计模式读书笔记(1)-策略模式(Strategy Pattern) HeadFirst设计模式读书笔记(2)-观察者模式(Observer Pattern) HeadFirst设计 ...
- C#设计模式学习笔记-单例模式随笔
最近学习 设计模式,从单例模式入手 啥是单例模式: 要实现一个单例类的话,首先,肯定是不能让用户自行生产的,那就是说明不能让用户new,所以,就必须把构造函数设置成为私有的 因为静态变量的生命周期跟整 ...
- 设计模式学习笔记--备忘录(Mamento)模式
写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方式,这就是软件模式:每个模式描写叙述了一个在我们程序设计中常常发生的问题,以及该问题的解决方式:当我们碰到模 ...
- C#设计模式学习笔记-单例模式(转)
C#设计模式学习笔记-单例模式 http://www.cnblogs.com/xun126/archive/2011/03/09/1970807.html 最近在学设计模式,学到创建型模式的时候,碰到 ...
- Java设计模式学习笔记(二) 简单工厂模式
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 正文开始... 1. 简介 简单工厂模式不属于GoF23中设计模式之一,但在软件开发中应用也较为 ...
- Java设计模式学习笔记(三) 工厂方法模式
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 简介 上一篇博客介绍了简单工厂模式,简单工厂模式存在一个很严重的问题: 就是当系统需要引入 ...
- Java设计模式学习笔记(四) 抽象工厂模式
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 抽象工厂模式概述 工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问 ...
随机推荐
- 【Q2D】 2048设计
主要组件 1: GameDirector ,负责胜利.失败.载入上次成绩等 2: Grid, 表格类,负责管理tile二维数组 3: Tile 元素类,就是界面上移动的砖块了 4: InputHelp ...
- 关于ajax中responseText不能返回脚本的问题。
今天做后台时想用ajax返回带有脚本的HTML DOM ,发现脚本被当成字符串了,查了一下responseText()方法返回的是字符串,查了一下百度,用了正则匹配,匹配到脚本然后执行,不想当一个伸手 ...
- win 7 64 安装 MondgoDB 3.4
https://jingyan.baidu.com/article/f3e34a12ac10cef5eb653583.html mongod --dbpath "D:\Program Fil ...
- linux命令——chmod/chown
改变文件所有权chown 例如 sudo chown username myfile 1 myfile文件的所有权变为username. chown -R username /files/work 1 ...
- 20145216 史婧瑶《Java程序设计》第6周学习总结
20145216 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 输入/输出 10.1 InputStream与OutputStream 如果要将数据从来源中取出,可以使用输 ...
- 20145324 《Java程序设计》第8周学习总结
20145324 <Java程序设计>第8周学习总结 教材学习内容总结 第十四章 1.NIO使用频道来衔接数据节点,可以设定缓冲区容量,在缓冲区中对感兴趣的数据区块进行标记,提供clear ...
- 完成了C++作业,本博客现在开始全面记录acm学习历程,真正的acm之路,现在开始
以下以目前遇到题目开始记录,按发布时间排序 ACM之递推递归 ACM之数学题 拓扑排序 ACM之最短路径做题笔记与记录 STL学习笔记不(定期更新) 八皇后问题解题报告
- CentOS 64位系统 yum安装32位软件包的方法
//假如你要安装libjpeg的32位版本 1.查询具体的32位版本,然后安装 yum search libjpeg.i686 yum -y install libjpeg.i386 2.一劳永逸的方 ...
- Linux kernel 编译问题记录【转】
本文转载自:http://sunyongfeng.com/201701/programmer/linux/kernel_compile_fail.html 编译内核出现以下错误 Can't use ' ...
- java和groovy的混用
java在语言的动态性方便不是很灵活,如果你想快速增加或改变一些方法,那么只能通过反射机制,并且参数传递的格式很严格. 相比之下,基于groovy可以快速写出一些自定义方法,并能和java很好结合,类 ...