C#设计模式——适配器模式
来源:互联网 发布:四川数智通软件下载 编辑:程序博客网 时间:2024/05/10 02:11
适配器模式:
大家有没有想过一个问题,电脑充电为何会有电源适配器?直接220V充电不是很快吗?答案原来在这里,笔记本工作电压很小,如果直接连接220V的电压可能会烧毁笔记本,所以我们需要一个东西来解决这个问题,那就是电源适配器。这是电源适配器,那么在软件工程中,我们又该如何用编码来实现适配器呢?这就是今天我想为大家介绍的适配器模式。
一、定义:
将一个类的接口转换成客户希望的另外一个接口。它可以使接口不兼容的类一起工作。
二、解决问题:
主要解决在软件系统中,常常要将一些“现存的对象”放到新的环境中,而新环境要求的接口是现对象不能满足的。
三、对象适配器优缺点:
1、优点:
- 可以在不修改原有代码的基础上来复用现有类,很好地符合 “开闭原则“。
- 采用 “对象组合”的方式,更符合松耦合。
2、缺点:
- 使得重定义Adaptee的行为较困难,这就需要生成Adaptee的子类并且使得Adapter引用这个子类而不是引用Adaptee本身。
四、应用:
1、适配器模式结构图:
理解结构图:
根据对象适配器模式结构图,在对象适配器中,客户端需要调用request()方法,而适配者类Adaptee没有该方法,但是它所提供的specificRequest()方法却是客户端所需要的。为了使客户端能够使用适配者类,需要提供一个包装类Adapter,即适配器类。这个包装类包装了一个适配者的实例,从而将客户端与适配者衔接起来,在适配器的request()方法中调用适配者的specificRequest()方法。因为适配器类与适配者类是关联关系(也可称之为委派关系),所以这种适配器模式称为对象适配器模式。
拿我们书中的例子来说,姚明刚开始到外国,在NBA和外国教练交流,但是姚明听不懂,所以他需要一个翻译。从这里来说,教练是客户端,姚明就是那个适配者类Adaptee,但是姚明有个打篮球的方法是教练需要的,为了让教练能和姚明交流,,需要一个翻译,这个翻译就是适配器类,它包装了“翻译”这个方法,通过它,教练和姚明就接上话了,实现了交流。
2、代码展示:
//Target class Target { public virtual void Request() { Console.WriteLine("普通请求!"); } } //Adaptee 需要适配的类 class Adaptee { public void SpecificRequest() { //Console.WriteLine("Called SpecificRequest()"); Console.WriteLine("特殊请求!"); } } //Adapter 通过在内部包装一个Adaptee对象,把源接口转换成目标接口 class Adapter : Target { private Adaptee adaptee = new Adaptee();//建立一个私有的Adaptee对象 public override void Request() { adaptee.SpecificRequest();//这样可以把表面上调用Request()方法变成实际调用SpecificRequest() } } //客户端调用 class Program { static void Main(string[] args) { Target target = new Adapter(); target.Request(); Console.Read(); } }
3、适用情况:
(1)当系统的数据和行为都不正确,但接口不符时,我们考虑用适配器
目的:使控制范围之外的一个原有对象与某个接口匹配。
(2)在使用一个已经存在的类,但如果他的接口,也就是它的方法和你的要求不相同时,就应该考虑用适配器模式:两个类所做的事情相同或相似,但是具有不同的接口时使用它。
(3)双方都不太容易修改的时候再使用适配器模式适配,而不是一有不同就用。
五、总结:
适配器模式将两个不相关的类联系起来,将接口不兼容的问题处理的很漂亮,这就是我对有关适配器模式的理解,有不合理之处,也欢迎大家提出宝贵的意见。
感谢你的阅读!
0 0
- C#设计模式——适配器模式
- C#设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式c#语言描述——适配器模式
- 设计模式c#语言描述——适配器模式
- C#设计模式之7——适配器模式
- 【C#设计模式-适配器模式】
- C#设计模式--适配器模式
- 设计模式c#语言描述——建造者模式、适配器模式、合成(Composite)模式
- 设计模式——适配器
- 每日设计模式——适配器模式
- 设计模式 - Factory 模式
- dom4j学习总结(一)
- EhCache 分布式缓存/缓存集群
- 嵌入式 SIGBUS和SIGSEGV详解
- mysql-5.7.10-winx64免安装版配置时碰到的问题
- C#设计模式——适配器模式
- Linux 启动grub error 24: Attempt to access block outside partition 解决
- ble广播包解析
- 【HTML5入门教程二】HTML5 视频属性的技巧分享
- GeoTools-数据组织结构
- NoSQL 之 Morphia 操作 MongoDB
- spring batch 3:Flow step简单介绍
- [算法学习]斐波那契数计算
- bat shell 脚本编程简介