- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
7.相关模式:如果有多个客户端对象需要调用同样的一些策略类的话,就可以使它们实现享元模式,这样客户端可以共享这些策略类。 8.体现的设计原则:很显然,策略模式能够在需要新的算法时候,可以很方便地将新的算法插入到现有的结构中,而不要修改现有的系统。这个是对开放—封闭原则的最直接的体现。 策略模式也支持里氏代换原则,因为所有的具体策略类在一个类型等级结构中,它们拥有共同的接口,策略可以互换。 适配器(Adapter)模式 1.模式名:适配器模式,别名包装器(wrapper)模式。 2.意图:将一个类的接口转换成客户端希望的另外一个接口。适配器模式能使原本由于接口不兼容而不能一起工作的那些类可以一起工作。 3.适用性: 1)当你想使用一个已经存在的类,而它的接口不符合你的需求。 2)你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。 3)(仅适用于对象适配器)你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。 4.结构与参与者:适配器模式有类适配器和对象适配器两种不同的形式。类适配器使用多重继承对一个接口与另一个接口进行匹配 图6-7 类适配器结构图 图6-8 对象适配器结构图 在适配器结构图中,有4个参与角色: Target,定义Client使用的与特定领域相关的接口;Client,与符合Target接口的对象协同; Adaptee定义一个已经存在的接口,这个接口需要适配; Adapter对Adapter的接口与Target接口进行适配。 Client 在 Adapter 实例上调用一些操作。接着适配器调用 Adaptee 的操作实现这个请求。 5.效果:类适配器和对象适配器有不同的权衡。 对于类适配器: 1)用一个具体的 Adapter 类对 Adaptee 和 Target 进行匹配。结果是当我们想要匹配一个类以及所有它的子类时,类 Adapter 将不能胜任工作。 2)使得 Adapter 可以重定义 Adaptee 的部分行为,因为 Adapter 是 Adaptee 的一个子类。 3)仅仅引入了一个对象,并不需要额外的指针以间接得到 adaptee。 对于对象适配器: 1)允许一个 Adapter 与多个 Adaptee —即 Adaptee 本身以及它的所有子类(如果有子类的话)—同时工作。Adapter 也可以一次给所有的 Adaptee 添加功能。 2)使得重定义 Adaptee 的行为比较困难。这就需要生成 Adaptee 的子类并且使得Adapter 引用这个子类而不是引用 Adaptee 本身。 6.示例与已知应用:变压器可以把一种电压值变成另外一种电压值。手机充电器就是一种变压器,它是将220V的电压转换成手机需要的电压,这样才可以正常为手机充电。手机充电器就是适配器模式的典型实例。 从简单工厂模式到工厂模式 简单工厂模式,是不同的的工厂方法模式的一个特殊实现,它往往作为工厂模式的一个特例。 Fruit Gardener类,可以根据客户端的要求,创建出 不同的水果对象,比如Apple、Grape或Strawberry的 实例;如果接到不适合的请求,该类会抛出异常。 Public class FruitGardener { public static Fruit factory (String which) throws BadFruitException{ if(which.equalsIgnoreCase(“apple”)){ return new Apple(); } if(which.equalsIgnoreCase(“grape”)){ return new Grape(); } if(which.equalsIgnoreCase(“strawberry”)){ return new Strawberry(); } else{ throw new BadFruitException(“wrong request”) } } } 客户端类的调用:在使用时,客户端只需要调用 FruitGardener的静态方法factory()即可。 Try { FruitGardener.factory(“grape”); FruitGa
文档评论(0)