博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式:适配器模式(Adapter)
阅读量:5754 次
发布时间:2019-06-18

本文共 1677 字,大约阅读时间需要 5 分钟。

1、适配器模式意图

定义:将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

2、适配器角色

      目标接口(Target):客户所期待的接口,目标可以是具体的或抽象的类,也可以是接口

  需要适配的类(Adaptee):需要适配的类或者适配者类。

  适配器(Adapter):通过包装一个需要适配的对象,把原接口转成成目标接口

如图:

3、适配器模式类型

  类适配器模式:

    当客户在接口中定义了他期望的行为时,我们就可以应用适配器模式了,提供一个实现该接口的类,并且扩展已有的类,通过创建子类来实现适配

  对象适配器模式:

    对象适配器"通过组合除了满足"用户期待的接口,还降低了代码间的不良耦合。

  缺省适配器模式:

    缺省适配器模式是一种特殊的适配器模式,但这个适配器模式是由一个抽象类实现的,并且在抽象类中要实现目标接口中所规定的所有方法,但很多方法的实现都是"平庸"的实现,也就是说,这些方法都是空方法,而具体的子类都要继承此抽象方法。

4、模式总结

优点:

     1:通过适配器模式,客户端可以调用同一个接口,因而对客户端来说是透明的,这样做更简单,更直接,更紧凑。

     2:复用了现存的类,解决了现存类和复用环境要求不一致的问题。

     3:将目标类和适配者解耦,通过引入一个适配器类重用现有的适配者类,而无需修改原有的代码。

     4:一个对象适配器可以把多个不同的适配者类适配到同一个目标,也就是说,同一个适配者可以把适配者类和它的子类都适配到目标接口

缺点:

  对于对象适配器来说,更换适配器的过程实现比较复杂。

5、模式使用场景

      1:系统需要使用现有的类,而这些类不符合系统的接口。

  2:想要建立一个可以重用的类,用于与一些彼此直接没有太大关联的一些类,包括一些可能在将来引进的类一起工作。

  3:两个类所做的事情相同或相似,但是具有不同接口的时候。

  4:旧的系统开发的类已经实现了一些功能,但是客户端却只能以另外接口的形式访问,但我们不希望手动更改原有得类的时候。

  5:使用第三方组件,组件接口定义和自己定义的不同,不希望修改自己的接口,但是要使用第三方组件接口的功能。

具体详细代码如下:

1 void Main() 2 { 3     Target target = new Adapters(); 4     target.Request(); 5     // Result : This Is  general category 6 } 7  8 // 用户所期待的接口 9 public class Target10 {11     public virtual void Request()12     {13         Console.WriteLine("This is a general category");14     }15 }16 17 // 定义适配器类 : 就是我们现在定义的接口18 public class Adaptee19 {20     public void SpecificRequest()21     {22         Console.WriteLine("This Is a Special category");23     }24 }25 26 // 定义适配器 : 用来将我们的接口转为用户所期望的接口27 public class Adapter : Target28 {29     private Adapter adapter = new Adapter();30     public override void Request()31     {32         adapter.SpecificRequest();33     }34 35 }

 

转载于:https://www.cnblogs.com/DeepLearing/p/3886089.html

你可能感兴趣的文章
ensp-1.2.00.390练习STP实验。
查看>>
Python 入门指南python tutorial 2.7中文版
查看>>
华为 eNSP 配置 rip OSPF 路由重发布
查看>>
我的友情链接
查看>>
自建ngrok服务
查看>>
zabbix 监控 Vmware ESXI
查看>>
Windows 7 Service Pack 1 (SP1)远程桌面管理工具
查看>>
【转】init.d目录理解【转】
查看>>
win7 添加共享打印机登陆失败的问题!!!
查看>>
awk 用法详解!
查看>>
linux下添加路由的多种方法
查看>>
通过Jenkins API获得/检测Jenkins的Version
查看>>
关于Git的ssh公私钥非对称传输的一点理解
查看>>
用python编写daemon监控进程并自动恢复(附Shell版)
查看>>
u盘格式化的格式及分配单元大小
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
互联网创业公司最常见的失败原因
查看>>
学 Win32 汇编[9]: 子过程中的变量声明
查看>>
Windows 编程[7] - WM_CREATE 消息
查看>>