0.C#设计模式-简单工厂模式

1.C#设计模式--工厂方法模式

2.C#设计模式--抽象工厂模式

3.C#设计模式--单例模式

4.C#设计模式--建造者模式

5.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#设计模式--设配器模式的更多相关文章

  1. java设计模式6--适配器模式(Adapter )

    本文地址:http://www.cnblogs.com/archimedes/p/java-adapter-pattern.html,转载请注明源地址. 适配器模式(别名:包装器) 将一个类的接口转换 ...

  2. JavaScript设计模式(7)-设配器模式

    适配器模式 1. 作用: 协调两个不同的接口 2. 适用场景 适配器适用于客户期待的接口与现有 API 提供的接口不兼容这种场景.他只能用来协调语法上的差异问题.适配器所适配的两个方法执行的应该是类似 ...

  3. 设计模式8---适配器模式(Adapter)

    1. 适配器模式简介 适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口.Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 适用场景: 1.已经存在 ...

  4. C#设计模式--装饰器模式

    0.C#设计模式-简单工厂模式 1.C#设计模式--工厂方法模式 2.C#设计模式--抽象工厂模式 3.C#设计模式--单例模式 4.C#设计模式--建造者模式 5.C#设计模式--原型模式 6.C# ...

  5. C++设计模式——享元模式

    本文版权归果冻说所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.如果这篇文章对你有帮助,你可以请我喝杯咖啡. » 本文链接:http:// ...

  6. C++设计模式——工厂方法模式

    本文版权归果冻说所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.» 本文链接:http://www.jellythink.com/arch ...

  7. [JS设计模式]:工厂模式(3)

    简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定的情况. 说的通俗点,就像公司茶水间的饮料 ...

  8. Spring 实现两种设计模式:工厂模式和单态模式(单例模式)

    本文摘自:李刚 著 <轻量级 Java EE企业应用实战 Struts2+Spring+hibernate整合开发> 在Spring 中大量使用的以下两种设计模式:工厂模式和单态模式. 工 ...

  9. 设计模式之工厂模式(c++)

    问题描述 在面向对象系统设计中经常可以遇到以下的两类问题:1)为了提高内聚(Cohesion)和松耦合(Coupling),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口.这样我们可以通过声明 ...

随机推荐

  1. C# 验证过滤代理IP是否有效

    private void 导入IPToolStripMenuItem_Click(object sender, EventArgs e) { using (OpenFileDialog Openfil ...

  2. unity3d 调用Start 注意

    在unity3d中,同一个脚本被绑定到多个物体上的时候,只有active的物体才会调用void Start ()  方法, 如果物体是NO Active 的状态,则不会调用Start,Awake也不会 ...

  3. 基于PHP采集数据入库程序(一)

    前几天有一朋友要我帮做一个采集新闻信息的程序,抽了点时间写了个PHP版本的,随笔记录下. 说到采集,无非就是远程获取信息->提取所需内容->分类存储->读取->展示 也算是简单 ...

  4. Objective-C语法之可变参数

    可变参数的方法在Objective-C中不罕见,像Cocoa中的很多常见的方法都是可变参数的,如: NSLog(NSString *format, ...) + (id)arrayWithObject ...

  5. KSImageNamed项目图片智能提示

    下载地址:https://github.com/ksuther/KSImageNamed-Xcode PS:如果在插件未更新到支持Xcode 6.3.2的情况下,要在Xcode 6.3.2中使用,需要 ...

  6. libstdc++.so.5: undefined reference to `memcpy@GLIBC_2.14'

    没有别的原因: 找正确的 libstdc++.so.5 包就成. 我这儿有,需要的可以下载奥!

  7. CentOS6.8手动安装MySQL5.6

    众所周知,mysql5.7推出后有很多没有填好的坑,对于老的系统和项目兼容性也存在问题,所以现在普遍的web项目还是应该跑在centos6.8+mysql5.6的环境之下,今天主要说一下mysql5. ...

  8. mysql中,创建表的时候指定if not exists参数的作用?

    需求说明: 在创建表的时候,如果指定if not exists语句,有什么作用,在此做个实验,并且官方手册, 理解下这个参数的作用. 操作过程: 1.创建测试表test01 mysql> cre ...

  9. requireJs压缩合并路径问题

    描述 随着前端开发的重要性,以及业务的复杂性,前端的模块化开发也被大众所接收,最常见的js框架requireJs,一个js文件对应一个模块,方便开发人员调试与维护,但是一个文件对应一个模块增加了htt ...

  10. IOS UILineBreakMode的各种情况分析

    typedef enum {    UILineBreakModeWordWrap = 0,    UILineBreakModeCharacterWrap,    UILineBreakModeCl ...