前言

多读书、多学习

介绍-适配器模式

定义:适配器模式(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. 哪个地图API 好用

    之前我们能用的地图软件还寥寥无几,而且一个地图包动辄就上百M,还不支持GPS,没有实时路况,没有卫星图,一年也未必更新一次.现如今的地图功能已经极大丰富了,开发者的项目选择性也很大,地图哪个受众比较多 ...

  2. ansible playbook部署ELK集群系统

    一.介绍 总共4台机器,分别为 192.168.1.99 192.168.1.100 192.168.1.210 192.168.1.211 服务所在机器为: redis:192.168.1.211 ...

  3. Ubuntu16.04桌面版 连接到ftp服务器

    Ftp服务器在不同的网段,需要临时添加网段 不同网段临时添加方法: root@xzrs:/home/rxf# ip addr add 10.1.2.127/24 dev enp0s25 电脑左侧“连接 ...

  4. qemu-nbd方式挂载qcow2镜像

    客户端配置 加载nbd模块 [root@centos sm]# rmmod nbd [root@centos sm]# modprobe nbd max_part=8 映射服务器的块设备到本地nbd设 ...

  5. wamp5.5.12安装re dis扩展

    转载地址:http://hanqunfeng.iteye.com/blog/1984387 phpredis是个人觉得最好的一个php-redis客户端,因为其提供的function与redis的命令 ...

  6. centos6.7安装lamp

    1.配置防火墙,开启80端口.3306端口 vi /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport ...

  7. Python3.x:python: extend (扩展) 与 append (追加) 的区别

    Python3.x:python: extend (扩展) 与 append (追加) 的区别 1,区别: append() 方法向列表的尾部添加一个新的元素.只接受一个参数: extend()方法只 ...

  8. 20145303刘俊谦 《Java程序设计》实验四 实验报告

    实验要求 完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).解决办法(空洞的方法如"查网络&q ...

  9. T-shirt again

    T-shirt again 标签(空格分隔): 软工实践 第一次获得小黄裳是在大一下的C++课上,见T-shirt 0.0... 这次在软工课上能再次获得小黄裳,是我没有想到的,个人觉得里面有蛮多的运 ...

  10. js中文逗号转英文逗号

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...