Java设计模式之Adapter模式 2

上传人:油条 文档编号:52747236 上传时间:2018-08-25 格式:PPT 页数:14 大小:226.50KB
返回 下载 相关 举报
Java设计模式之Adapter模式 2_第1页
第1页 / 共14页
Java设计模式之Adapter模式 2_第2页
第2页 / 共14页
Java设计模式之Adapter模式 2_第3页
第3页 / 共14页
Java设计模式之Adapter模式 2_第4页
第4页 / 共14页
Java设计模式之Adapter模式 2_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《Java设计模式之Adapter模式 2》由会员分享,可在线阅读,更多相关《Java设计模式之Adapter模式 2(14页珍藏版)》请在金锄头文库上搜索。

1、Java设计模式之Adapter模式 2,CAAdress类提供了一个isValidCanadianAddr方法,但是Customer期望一个声明在AddressValidator接口中的isValidAddress方法。接口的不兼容使得Customer对象利用现有的CAAdress类是困难的。一种意见是改变CAAdress类的接口,但是可能会有其他的应用正在使用CAAdress类的这种形式。改变CAAdress类接口会影响现在使用CAAdress类的客户。应用适配器模式,类适配器CAAdressAdapter可以继承CAAdress类实现AddressValidator接口。,Figure

2、20.3: Class Adapter for the CAAddress ClassListing 20.6: CAAddressAdapter as a Class Adapterpublic class CAAddressAdapter extends CAAddressimplements AddressValidator public boolean isValidAddress(String inp_address,String inp_zip, String inp_state) return isValidCanadianAddr(inp_address, inp_zip,in

3、p_state);/end of class,因为适配器CAAdressAdapter实现了AddressValidator接口,客户端对象访问适配器CAAdressAdapter对象是没有任何问题的。当客户对象调用适配器实例的isValidAddress方法的时候,适配器在内部把调用传递给它继承的isValidCanadianAddr方法。在Customer类内部,getValidator私有方法需要扩展,以至于它可以在验证加拿大客户的时候返回一个CAAdressAdapter实例。返回的对象是多态的,USAddress和CAAddressAdapter都实现了AddressValidato

4、r接口,所以不用改变。Listing 20.7: Customer Class Using the CAAddressAdapter Classclass Customer ,public boolean isValidAddress() /get an appropriate address validatorAddressValidator validator = getValidator(type);/Polymorphic call to validate the addressreturn validator.isValidAddress(address, zip, state);,

5、private AddressValidator getValidator(String custType) AddressValidator validator = null;if (custType.equals(Customer.US) validator = new USAddress();if (type.equals(Customer.CANADA) validator = new CAAddressAdapter();return validator;/end of classCAAddressAdapter设计和对AddressValidator(声明期望的接口)对象的多态调用

6、使Customer可以利用接口不兼容CAAddress类提供的服务。,Figure 20.4: Address Validation Application?Using Class Adapter,Figure 20.5: Address Validation Message Flow?Using Class Adapter,作为对象适配器的地址适配器当讨论以类适配器来实现地址适配器时,我们说客户类期望的AddressValidator接口是Java接口形式。现在,让我们假设客户类期望AddressValidator接口是抽象类而不是java接口。因为适配器CAAdapter必须提供抽象类Ad

7、dressValidatro中声明的接口,适配器必须是AddressValidator抽象类的子类、实现抽象方法。Listing 20.8: AddressValidator as an Abstract Classpublic abstract class AddressValidator public abstract boolean isValidAddress(String inp_address,String inp_zip, String inp_state);/end of class,Listing 20.9: CAAddressAdapter Classclass CAAdd

8、ressAdapter extends AddressValidator public CAAddressAdapter(CAAddress address) objCAAddress = address;public boolean isValidAddress(String inp_address,String inp_zip, String inp_state) ,/end of class因为多继承在JAVA中不支持,现在适配器CAAddressAdapter不能继承现有的CAAddress类,它已经使用了唯一一次继承其他类的机会。应用对象适配器模式,CAAddressAdapter可

9、以包含一个适配者CAAddress的一个实例。当适配器第一次创建的时候,这个适配者的实例通过客户端传递给适配器。通常,适配者实例可以通过下面两种方式提供给包装它的适配器。(1) 对象适配器的客户端可以传递一个适配者的实例给适配器。这种方式在选择类的形式上有很大的灵活性,但是客户端感知了适配者或者适配过程。这种方法在适配器不但需要适配者对象行为而且需要特定状态时很适合。(2) 适配器可以自己创建适配者实例。这种方法相对来说缺乏灵活性。适用于适配器只需要适配者对象的行为而不需要适配者对象的特定状态的情况。,Figure 20.6: Object Adapter for the CAAddress

10、ClassListing 20.10: CAAddressAdapter as an Object Adapterclass CAAddressAdapter extends AddressValidator private CAAddress objCAAddress;public CAAddressAdapter(CAAddress address) objCAAddress = address;,public boolean isValidAddress(String inp_address,String inp_zip, String inp_state) return objCAAddress.isValidCanadianAddr(inp_address,inp_zip, inp_state);/end of class 更多资料 java培训 http:/ 适配器在内部调用CAAddress(adaptee)上的isValidCanadianAddr方法。,Figure 20.7: Address Validation Application?Using Object Adapter从这个例子可以看出,适配器可以使Customer(client)类访问借口不兼容的CAAddress(adaptee)所提供的服务!,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号