前言

多读书、多学习

介绍-适配器模式

定义:适配器模式(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# 设计模式巩固笔记 - 适配器模式的更多相关文章

  1. 设计模式之笔记--适配器模式(Adapter)

    适配器模式(Adapter) 定义 适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 适配器模式 ...

  2. 7 种 Javascript 常用设计模式学习笔记

    7 种 Javascript 常用设计模式学习笔记 由于 JS 或者前端的场景限制,并不是 23 种设计模式都常用. 有的是没有使用场景,有的模式使用场景非常少,所以只是列举 7 个常见的模式 本文的 ...

  3. HeadFirst设计模式读书笔记--目录

    HeadFirst设计模式读书笔记(1)-策略模式(Strategy Pattern) HeadFirst设计模式读书笔记(2)-观察者模式(Observer Pattern) HeadFirst设计 ...

  4. C#设计模式学习笔记-单例模式随笔

    最近学习 设计模式,从单例模式入手 啥是单例模式: 要实现一个单例类的话,首先,肯定是不能让用户自行生产的,那就是说明不能让用户new,所以,就必须把构造函数设置成为私有的 因为静态变量的生命周期跟整 ...

  5. 设计模式学习笔记--备忘录(Mamento)模式

    写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方式,这就是软件模式:每个模式描写叙述了一个在我们程序设计中常常发生的问题,以及该问题的解决方式:当我们碰到模 ...

  6. C#设计模式学习笔记-单例模式(转)

    C#设计模式学习笔记-单例模式 http://www.cnblogs.com/xun126/archive/2011/03/09/1970807.html 最近在学设计模式,学到创建型模式的时候,碰到 ...

  7. Java设计模式学习笔记(二) 简单工厂模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 正文开始... 1. 简介 简单工厂模式不属于GoF23中设计模式之一,但在软件开发中应用也较为 ...

  8. Java设计模式学习笔记(三) 工厂方法模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 简介 上一篇博客介绍了简单工厂模式,简单工厂模式存在一个很严重的问题: 就是当系统需要引入 ...

  9. Java设计模式学习笔记(四) 抽象工厂模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 抽象工厂模式概述 工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问 ...

随机推荐

  1. XVII Open Cup named after E.V. Pankratiev Stage 14, Grand Prix of Tatarstan, Sunday, April 2, 2017 Problem D. Clones and Treasures

    题目:Problem D. Clones and TreasuresInput file: standard inputOutput file: standard outputTime limit: ...

  2. POJ - 2125 Destroying The Graph (最小点权覆盖)

    题意:给一张图,现在要删去所有的边,删去一个点的所有入边和所有出边都有其对应\(W_{i+}\)和\(W_{i-}\).求删去该图的最小花费,并输出解 分析:简而言之就是用最小权值的点集去覆盖所有的边 ...

  3. 今天刚接触lua 写写环境配置和基本设置

    首先是安装开发工具: Quick: http://www.tairan.com/engines-download 引擎 Sublime Text的下载地址为:http://www.sublimetex ...

  4. ubuntu下python+tornado+supervisor+nginx部署

    由于项目需要,老师让我写一个小web系统,之前都是用java写web,想到自己最近学机器学习要用python,所以用python来写一下,此外,因为想用点新东西,也介于程序比较小,所以考虑用mongo ...

  5. git 提交和下载代码

    在github下需先 New repository 下载:进入程序工程目录下 如 cd f: cd ./Program\ Files/eclipse/workspace/IMoocMusic/ git ...

  6. Windows下编译live555源码

    Windos下编译live555源码 环境 Win7 64位 + VS2012 步骤 1)源码下载并解压 在官网上下载最新live555源码,并对其进行解压. 2)VS下建立工程项目 新建Win32项 ...

  7. spring boot开发为什么使用jar包

    spring boot既可以打成war发布,也可以找成jar包发布. jar包:直接通过内置tomcat运行,不需要额外安装tomcat.如需修改内置tomcat的配置,只需要在spring boot ...

  8. 20145303刘俊谦 《Java程序设计》第三周学习总结

    20145303刘俊谦 <Java程序设计>第三周学习总结 教材学习内容总结 1.类与对象: 类:对现实生活中事物的描述,定义类时用关键词class 对象:这类事物实实在在存在的个体,利用 ...

  9. RocEDU.阅读.写作《苏菲的世界》书摘(四)

    亚理斯多德认为,快乐有三种形式.一种是过着享乐的生活,一种是做一个自由而负责的公民,另一种则是做一个思想家与哲学家.接着,他强调,人要同时达到这三个标准才能找到幸福与满足. 亚理斯多德提倡所谓的&qu ...

  10. Java 面试题基础概念收集

    问题:如果main方法被声明为private会怎样? 答案:能正常编译,但运行的时候会提示”main方法不是public的”. 问题:Java里的传引用和传值的区别是什么? 答案:传引用是指传递的是地 ...