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. 抽象工厂模式概述 工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问 ...
随机推荐
- DataTable转换成IList
//文章出处: http://www.cnblogs.com/hlxs/archive/2011/05/09/2087976.html DataTable转换成IList 在用C#作开发的时候经常要把 ...
- Java-线程池专题(什么是线程池,如何使用,为什么要用)
1.什么是线程池: java.util.concurrent.Executors提供了一个 java.util.concurrent.Executor接口的实现用于创建线程池 多线程技术主要解决处理 ...
- JQuery归纳总结(增加中...)
一.this与$(this)的区别 this指向标签本身对象,而$(this)会将其封装成JQuery对象 如: $(" img").mousemove( function(e){ ...
- qml源码查看
已5.4为例说明: QtQuick源码查看: 地址:Qt\Qt5.4.1\5.4\Src\qtdeclarative\src\quick\items Qt control源码查看: 地址:\Qt\Qt ...
- timestamp类型在jsp页面输出格式化方法
jsp页面使用了iterator迭代器,迭代器中有个属性名字为time,其类型为timestamp类型的,至于为什么是这个类型嘛,就是用navicat建好数据库直接映射出来的实体类,所以就是这个类型啦 ...
- 2045331 《Java程序设计》第09周学习总结
2045331 <Java程序设计>第09周学习总结 教材学习内容总结 第十六章 整合数据库 16.1.1JDBC简介 1.JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接 ...
- 完成了C++作业,本博客现在开始全面记录acm学习历程,真正的acm之路,现在开始
以下以目前遇到题目开始记录,按发布时间排序 ACM之递推递归 ACM之数学题 拓扑排序 ACM之最短路径做题笔记与记录 STL学习笔记不(定期更新) 八皇后问题解题报告
- poj_2528 Mayor's posters (线段树经典题+离散化方法)
由于题面中给定的wall最大长度为10 000 000:若简单用线段树势必会超时. 而注意到题面中规定了输入海报的个数<=1000:因此不妨离散化,使得线段中叶节点仅含有1000个,那么线段最大 ...
- Spring Boot 之restful风格
步骤一:restful风格是什么? 我们知道在做web开发的过程中,method常用的值是get和post.可事实上,method值还可以是put和delete等等其他值. 既然method值如此丰富 ...
- Win10m的前景到底在何方?
今天晚上就是build2016的微软开发者大会了,满怀着期待. 本人一直是一名微软的粉丝,我年纪小,刚开始接触电脑的时候是win98,那时候也没怎么玩过电脑,到后来经常接触电脑的时候,所有的电脑都是w ...