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. 抽象工厂模式概述 工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问 ...
随机推荐
- 重定向符号和tee命令区别
来源:http://zyp88.blog.51cto.com/1481591/1604036 功能说明:读取标准输入的数据,并将其内容输出成文件. 语 法:tee [-ai][--help][-- ...
- Python面试题之多个装饰器执行顺序
疑问 大部分涉及多个装饰器装饰的函数调用顺序时都会说明它们是自上而下的,比如下面这个例子: def decorator_a(func): print 'Get in decorator_a' def ...
- FTP 两种工作模式
主动模式port FTP主动模式:TCP链接客户端访问FTP,客户端会开启一个大于1024的端口N访问FTP的21端口(控制端口),并通过21端口发送port命令与N+1的端口,服务端收到命令后会使用 ...
- Redis 数据结构-字符串源码分析
相关文章 Redis 初探-安装与使用 Redis常用指令 本文将从以下几个部分进行介绍 1.前言 2.常用命令 3.字符串结构 4.字符串实现 5.命令是如果操作字符串的 前言 平时在使用 Redi ...
- MySQL多版本并发控制机制(MVCC)-源码浅析
MySQL多版本并发控制机制(MVCC)-源码浅析 前言 作为一个数据库爱好者,自己动手写过简单的SQL解析器以及存储引擎,但感觉还是不够过瘾.<<事务处理-概念与技术>>诚然 ...
- 20145329 《Java程序设计》实验一总结
实验指导教师:娄嘉鹏老师 实验日期:2016.4.8 实验时间:16:30~18:30 实验序号:实验一 实验名称:Java开发环境的熟悉 实验目的与要求: 使用JDK编译.运行简单的Java程序. ...
- Redis中RedisTemplate和Redisson管道的使用
当对Redis进行高频次的命令发送时,由于网络IO的原因,会耗去大量的时间.所以Redis提供了管道技术,就是将命令一次性批量的发送给Redis,从而减少IO. 一.Jedis对redis的管道进行操 ...
- rhel7配置samba_4.7.1,共享给所有人以及共享给指定用户
1.共享给所有人 服务端配置: yum -y install samba samba-client samba-common #安装客户端 mkdir /guest #创建共享文件夹 c ...
- java类库字符串操作
在java类库中,java给我们提供了字符串几个特别的操作,分别是String,Stringbuffer,Stringbuilder等.下面就对这几个类做一个简单的介绍.首先,我们先了解一下Strin ...
- 异步:asyncio和aiohttp的一些应用(1)
1. asyncio 1.1asyncio/await 用法 async/await 是 python3.5中新加入的特性, 将异步从原来的yield 写法中解放出来,变得更加直观. 在3.5之前,如 ...