设计模式(5)--Adapter 适配器

前面4种模式都是与创建对象相关,适配器开始,是与程序结构相关的模式,即以合理的结构组织程序达到设计模式准则。
这里写图片描述
从前,Adaptee实现的是OldTarget接口,实现了SpecialRequest()方法,Adaptee工作的很好。突然,改变来了,新的软件版本发布,集合的遍历器变成了新的iterator。接口也变成了Target,Target接口里给出的是request方法。
从新软件版本使用的客户,只知道我应该调用target接口完成我的需求。那么问题来了,Adaptee得改。这就等于破坏了Adaptee的结构,并和target耦合了。反过来说,有些老客户仍使用oldTarget接口,但是新的实现已经完全不支持adptee了,那么就需要继承一下Adaptee重写他的方法但是里面全部用新的实现。 如果是某些地方要使用Target但是有一些地方仍然使用OldTarget,那改Adaptee就更不合适了。因此,加入adapter,继承adaptee并实现Target接口的新方法request。 所以,适配器模式,用于在【不想破坏源对象的接口的情况下,仍提供给客户其希望调用的接口】的实际应用场景。

注意,适配的两方可以互换即成为双向适配。 另外,适配模式中的两方,可以没有任何关联,不需要有相同的方法。像java版本变迁这种,大量的使用适配器,所以应该将适配器当做一种补偿模式来使用,专用来在系统后期扩展、修改。

注意Adpter适配Adaptee时,可以使用成员类方式,也可以使用继承方式:

  1. 类适配器:adapter extends adaptee implements target 。单继承限定,表示adapter就是为adaptee这个类而生成的,叫类适配器。在适配的同时也可以适当重写Adaptee的方法。
  2. 对象适配器:adapter implements target{ private Adaptee1 member1; private Adaptee2 member2} 这样实际上可以同时适配多个源对象,完成不同的工作,叫对象适配器。对象适配器可以减少适配器的个数,但可能容易混乱,原子性不强。而且不能够重写源对象的方法。
  3. 还有一种叫做缺省适配器:使用一个接口实现一个抽象类,并为每个接口方法提供一个空的方法实现。这样继承这个抽象类的方法,就可以只重写自己需要的方法,那些不需要的方法已由接口帮忙写了空实现。 这样代码看上去也舒服。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值