设计模式复习之适配器模式

一、概念

适配器模式是一种结构型模式,所谓结构性模式(Structural Pattern):

描述如何将类或者对象结合在一起,以此来形成更大的结构。

结构型模式可以分为类结构型和对象结构型,其中,类结构型模式关心类层次的组合,一般只存在继承关系和实现关系;而对象结构型关心类与对象的组合,通过关联关系使得在一个类中定义另外一个类的实例对象。根据尽量用组合而不用继承的原则,大部分结构型模式都是对象结构型。

适配器模式:

将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。

由此可见,适配器模式的主要功能在于“兼容”,在适配器模式中定义一个包装类(也就是适配器,Adapter),用来包装不被客户端兼容的对象,这个对象就是适配者(Adaptee),但这个过程对客户端是透明的,客户端并不知道Adapter内部调用了Adaptee的方法。

二、类图

类适配器

ClassAdapter

对象适配器

ObjectAdapter

三、实例代码

以下是类结构型适配器的简单代码:


四、JDK和适配器

       在jdk中,有很多代码都是用到各个类型的设计模式,比如InputStreamReader和OutputStreamWrite就用到了适配器模式。拿InputStreamReader举例,使用的是对象适配器,它继承自Reader(就是Target),并在这个对象中持有StreamDecoder(Adaptee)对象:

 
 
 
 

构造InputStreamReader时会初始化这个空白final对象,拿其中之一构造函数来看:

当Client调用read()方法时,适配器InputStreamReader会将请求适配给适配者,既调用StreamDecoder对象的read方法:

这样,在Client不知情的情况下,达到了接口兼容的效果。

五、总结

1、优缺点

1)将目标类和适配者类解耦,无需修改原来的代码;

2)灵活性和扩展性好,符合“开闭原则”;

3)对于Java这种不支持多重继承的语言,一次最多只能适配一个适配者类,而且目标抽象类只能为抽象类,不能为具体类,其使用有一定的局限性,不能将一个适配者类和它的子类都适配到目标接口。

2、适用场景

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

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

ps

不知道大家平时用什么工具画UML,刚刚网上找了一个JUDE-Community,基本功能都有,也比较Q,符合我的审美,但是各个图、组建对齐好像没有快捷键,线也没有像PowerDesigner一样可以指定角度,每次都得自己移动鼠标调整,有点麻烦。

 

转载于:https://www.cnblogs.com/leealways87/archive/2013/05/05/3060955.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值