- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Adapter(适配器)——换个包装再利用 定义 引子:给手机充电,发现只支持USB接口充电方式,需要为充电器装一个接口转换器 软件开发中,如果既有内容无法直接利用时,通常需要先转换成必要的类型后再使用 定义 假设网络游戏的客户端程序分两部分。一部分是和服务端通讯的大厅部分,另一部 分就是游戏程序了,由不同的公司在进行开发, 通过实现约定的接口和游戏程序进行通讯。? 在大厅程序开发接近完成的时候,公司决定和另外一家游戏公司合作,?因此希望把大厅程序能适用另一个游戏。而这个新游戏的遵循的是另一套接口。 我们假设大厅程序和游戏程序之间有100个接口, 是不是可以避免修改原先调用方法来启动场景呢? 定义 将一个类的接口转换成客户希望的的另外一个接口 使原本由于接口不兼容而不能一起工作的那些类可以一起工作 适配器模式是为了在面向接口编程中更好的复用 定义 Target: 目标角色 定义Client要用的特定领域的接口 Adapter: 适配器角色 适配器模式的核心,将被适配角色已有的接口转化为目标角色希望的接口 Adaptee:被适配角色 有一个已经存在并使用了的接口,只个接口是需要我们适配的 Client: 客户调用类 协同对象符合Adapter适配器(公接口) 定义 定义 类型 类的Adapter模式(继承) 对象的Adapter模式(委托) 电压转换插座 美国电器的额定电压是120V,中国电器的额定电压是220V 中国和美国电器之间实现电压转换 电压转换插座 定义两个电器类的interface: ChineseAppliance和USAppliance。 public interface ChineseAppliance {??void powerOn(ChinesePlug cp); } public interface USAppliance {?void powerOn(USPlug up); } 电压转换插座 定义两个插座类的interface: ChinesePlug和USPlug。 电器接口中的powerOn方法,分别要用到ChinesePlug和USPlug对象作为参数。 public interface ChinesePlug {??public void chargeIn220V(); } public interface USPlug {public void chargeIn120V();} 电压转换插座 ChineseAppliance接口,写一个类ChineseTV来实现。 USAppliance接口,写一个USFridge类来实现。 ChinesePlug接口,写一个ChinesePlugInstance类实现。 USPlug接口写一个USPlugInstance类实现。 电压转换插座 public class ChineseTV implements ChineseAppliance {?public void powerOn(ChinesePlug cp){??cp.chargeIn220V();??System.out.println(ChineseTV is on);?} } public class USFridge implements USAppliance {?public void powerOn(USPlug up){??up.chargeIn120V();??System.out.println(USFridge is on);?} } 电压转换插座 public class ChinesePlugInstance implements ChinesePlug {??public void chargeIn220V(){??System.out.println(charge in volt 220);?} } public class USPlugInstance implements USPlug{?public void chargeIn120V(){??System.out.println(charge in volt 120);?} } 电压转换插座 创建Adapter来实现转换。 ChinaToUSAdapter类实现把中国电压转换成美国电压, USToChinaAdapter类实现把美国电压转换成中国电压。 电压转换插座 public class ChinaToUSAdapter extends ChinesePlugInstance implements USPlug {?public void chargeIn120V(){??chargeIn220V();?} } public class USToCh
文档评论(0)