C#设计模式--设配器模式
设计模式:
适配器模式(Adapter Pattern)
简单介绍:
适配器模式(Adapter Pattern)将一个类的接口转换成客户希望的另外一个接口,比如说用户希望将普通家用的220V电压转换成5V给手机充电,那么就需要一个转换设备,手机充电头和充电线,就是这个道理!似乎笔记本电脑的电源线就叫电源适配器,这里的适配器大概就是这个思想
原型模式参与者:
目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。
需要适配的类(Adaptee):需要适配的类或适配者类。
适配器(Adapter):通过包装一个需要适配的对象,将Target这个用户期待的接口转换成用户需要的Adaptee
适配器模式类图:
适配器模式c#代码示例:
Target 目标类
/// <summary>
/// 目标类
/// </summary>
public class Target
{
public virtual void TargetPrint()
{
Console.WriteLine("My name is Target!");
}
}
Adaptee类 受改造的类
/// <summary>
/// 受改造的类
/// </summary>
public class Adaptee
{
public void AdapteePrint()
{
Console.WriteLine("My name is Adaptee.");
}
}
Adapter 适配器类
/// <summary>
/// 适配器
/// </summary>
public class Adapter : Target
{
private Adaptee adaptee = new Adaptee();
public override void TargetPrint()
{
adaptee.AdapteePrint();
}
}
用户测试类
class Client
{
static void Main(string[] args)
{
Target target = new Adapter();
target.TargetPrint();
Console.Read();
}
}
运行结果:
适配器模式C#源码工程文件下载
适配器模式实际生活举例
举例说明:
假设将普通用户的标准电压220V转换成手机充电的标准电压5V(这里仅仅是举例子,如果有不恰当,还望多多包涵)
目标接口(Target):普通用户标准电压类--->UserStandardVoltage.cs
需要适配的类(Adaptee):手机用户充电电压类-->MobileChargingVoltage.cs
适配器(Adapter):适配器类-->PowerAdapter.cs
类图参考
适配器模式成C#代码生活例子举例说明:
serStandardVoltage类 普通用户家用标准电压220V
/// <summary>
/// 用户标准电压
/// </summary>
public class UserStandardVoltage
{
public virtual void printVoltage()
{
Console.WriteLine("我是用户标准电压220V!");
}
}
MobileChargingVoltage普通用户手机充电标准电压5V
public class MobileChargingVoltage
{
public void printVoltage()
{
Console.WriteLine("我是手机标准充电电压5V");
}
}
PowerAdapter电源适配器类 将用户标准电压220V转换为手机充电标准电压5V
/// <summary>
/// 电源适配器类
/// </summary>
public class PowerAdapter:UserStandardVoltage
{
private MobileChargingVoltage mobileChargingVoltage = new MobileChargingVoltage();
public override void printVoltage()
{
mobileChargingVoltage.printVoltage();
}
}
用户测试类:用户使用使用居民标准电压220V的接口,利用适配器既可以得到5V电压标准的接口
class Client
{
static void Main(string[] args)
{
UserStandardVoltage userStandardVoltage = new PowerAdapter();
userStandardVoltage.printVoltage();
Console.Read();
}
}
运行结果
适配器模式C#源码工程文件下载手机电源适配器实例
C#设计模式--设配器模式的更多相关文章
- java设计模式6--适配器模式(Adapter )
本文地址:http://www.cnblogs.com/archimedes/p/java-adapter-pattern.html,转载请注明源地址. 适配器模式(别名:包装器) 将一个类的接口转换 ...
- JavaScript设计模式(7)-设配器模式
适配器模式 1. 作用: 协调两个不同的接口 2. 适用场景 适配器适用于客户期待的接口与现有 API 提供的接口不兼容这种场景.他只能用来协调语法上的差异问题.适配器所适配的两个方法执行的应该是类似 ...
- 设计模式8---适配器模式(Adapter)
1. 适配器模式简介 适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口.Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 适用场景: 1.已经存在 ...
- C#设计模式--装饰器模式
0.C#设计模式-简单工厂模式 1.C#设计模式--工厂方法模式 2.C#设计模式--抽象工厂模式 3.C#设计模式--单例模式 4.C#设计模式--建造者模式 5.C#设计模式--原型模式 6.C# ...
- C++设计模式——享元模式
本文版权归果冻说所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.如果这篇文章对你有帮助,你可以请我喝杯咖啡. » 本文链接:http:// ...
- C++设计模式——工厂方法模式
本文版权归果冻说所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.» 本文链接:http://www.jellythink.com/arch ...
- [JS设计模式]:工厂模式(3)
简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定的情况. 说的通俗点,就像公司茶水间的饮料 ...
- Spring 实现两种设计模式:工厂模式和单态模式(单例模式)
本文摘自:李刚 著 <轻量级 Java EE企业应用实战 Struts2+Spring+hibernate整合开发> 在Spring 中大量使用的以下两种设计模式:工厂模式和单态模式. 工 ...
- 设计模式之工厂模式(c++)
问题描述 在面向对象系统设计中经常可以遇到以下的两类问题:1)为了提高内聚(Cohesion)和松耦合(Coupling),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口.这样我们可以通过声明 ...
随机推荐
- AMQ5540, AMQ5541 and AMQ5542, application did not supply a user ID and password, 2035 MQRC_NOT_AUTHORIZED
Technote (troubleshooting) Problem(Abstract) As an MQ administrator you create a new queue manager i ...
- NR 数据库简介
目前有很多的数据库都存储了蛋白序列,比如NCBI Refseq, protein, swissprot 等,在各个数据库之间,或者是在某个数据库中,蛋白序列有大量冗余:为了方便使用,ncbi 构建了n ...
- remove docker ce fully on centos7
在centos7上用curl 安装了docker ce版本 删除的方法是 $ sudo yum -y remove docker-ce
- System.web和System.WebServer
System.WebServer是因为iis7而出现的,也就是说如果在Classic下会被忽略,而System.web是iis以前版本的配置. httpModules modules
- pycharm环境下:同文件夹下文件(.py)之间的调用,出现红线问题
只要将pycharm下打开项目后: 将你运行文件(.py)的项目设置为根目录,就不会出现红色线:
- u3d 场景资源打包
搞了一天终于搞定u3d的场景打包,这样就可以不用修改太多程序,把资源放在外部修改了.好处多多 但是本来很简单的东西搞了一天,google来的说作为场景scene.unity 文件 打包成 unityd ...
- Linux学习笔记(二):实战-根据微服务端口号关闭进程
前言 现在项目组基本都用Springboot,每个服务占用一个端口号,有时需要选择性的关闭,但在任务管理器上他们的名称都是java.exe,无法区分,这才学以致用. killPort.sh 作用:根据 ...
- js准确获取当前页面url网址信息
这篇文章主要为大家介绍了js准确获取当前页面url网址信息的多种方法,包括正则法.split拆分法等,需要的朋友可以参考下 在WEB开发中,时常会用到javascript来获取当前页面的url网址 ...
- 彻底搞清楚Java并发 (一) 基础
多线程编程是为了让程序运行得更快,但是不是说,线程创建地越多越好,线程切换的时候上下文切换,以及受限于硬件和软件资源的限制问题 上下文切换 单核CPU同样支持多线程编程,CPU通过给每个线程分配CPU ...
- Windows 下 绿化 Oracle
既然Oracle在非windows平台上可以很“绿色”的执行,那么在windows平台上有无可能呢? 答案是“Yes-No” 基本上,除了监听器(lisentner)这个异类外,Oracle实例完全可 ...