GoF设计模式之适配器模式
来源:互联网 发布:手机微博淘客软件 编辑:程序博客网 时间:2024/06/06 01:13
1. 概述
适配器模式(Adapter Pattern)将一个接口转换成客户希望的另一个接口,从而使不兼容的那些类可以一起工作。
2. 解决的问题
即Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
3.适配器模式结构图
4 模式中的角色
3.1 目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。
3.2 需要适配的类(Adaptee):需要适配的类或适配者类。
3.3 适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。
5. 模式解读
5.1适配器模式的代码实现
/// 定义客户端期待的接口 public class Target { // 使用virtual修饰以便子类可以重写 public virtual void Request() { Console.WriteLine("This is a common request"); } } // 定义需要适配的类 public class Adaptee { public void SpecificRequest() { Console.WriteLine("This is a special request."); } } // 定义适配器 public class Adapter:Target { // 建立一个私有的Adeptee对象 private Adaptee adaptee = new Adaptee(); // 通过重写,表面上调用Request()方法,变成了实际调用SpecificRequest() public override void Request() { adaptee.SpecificRequest(); } }
5.2 客户端代码
class Program { static void Main(string[] args) { // 对客户端来说,调用的就是Target的Request() Target target = new Adapter(); target.Request(); Console.Read(); } }
5.3运行结果
6 模式总结
6.1 优点
6.1.1 通过适配器,客户端可以调用同一接口,因而对客户端来说是透明的。这样做更简单、更直接、更紧凑。
6.1.2 复用了现存的类,解决了现存类和复用环境要求不一致的问题。
6.1.3 将目标类和适配者类解耦,通过引入一个适配器类重用现有的适配者类,而无需修改原有代码。
6.1.4 一个对象适配器可以把多个不同的适配者类适配到同一个目标,也就是说,同一个适配器可以把适配者类和它的子类都适配到目标接口。
6.2 缺点
对于对象适配器来说,更换适配器的实现过程比较复杂。
6.3 适用场景
6.3.1 系统需要使用现有的类,而这些类的接口不符合系统的接口。
6.3.2 想要建立一个可以重用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。
6.3.3 两个类所做的事情相同或相似,但是具有不同接口的时候。
6.3.4 旧的系统开发的类已经实现了一些功能,但是客户端却只能以另外接口的形式访问,但我们不希望手动更改原有类的时候。
6.3.5 使用第三方组件,组件接口定义和自己定义的不同,不希望修改自己的接口,但是要使用第三方组件接口的功能。
7. 适配器应用举例
7.1 使用过ADO.NET的开发人员应该都用过DataAdapter,它就是用作DataSet和数据源之间的适配器。DataAdapter通过映射Fill和Update来提供这一适配器。
7.2 手机电源适配器
- GoF设计模式之适配器模式
- GOF之适配器模式
- GOF设计模式-适配器模式
- GOF设计模式之适配器模式的理解
- GOF 设计模式之 Command
- GoF设计模式之设计模式
- 再读GOF设计模式之原型模式
- GOF 23 设计模式之 状态模式
- GOF设计模式之“单例模式”
- GOF设计模式之旅------工厂模式
- GOF设计模式之“工厂模式”
- GOF设计模式之工厂模式
- GoF设计模式之行为型模式
- GoF设计模式之结构型模式
- GoF 23个经典的设计模式6--结构模式之适配器模式(未完代续)
- 设计模式之适配器
- 设计模式之适配器
- 设计模式之适配器
- c++基本数据结构的类的用法--栈,队列,链表
- OpenFlashChart2的使用
- shell 练习(function,case,for,select)
- JqueryUI AutoComplate实现文本框搜索,自动补全效果
- Java集合框架总结(3)——TreeSet类的排序问题
- GoF设计模式之适配器模式
- python操作数据库PostgreSQL
- android获得布局的Bitmap对象
- python中函数参数传递的几种方法
- 分支限界和回溯法的对比
- 段描述符
- A server error has occured
- 第2章 22
- 关于轮询,长轮询,Server Send Event,websocket的理解