您的位置:逆风者 新闻资讯 正文
 添加时间:2007-11-07 原文发表:2007-11-07 人气:37

本文章共6680字,分5页,当前第3页,快速翻页:
 

   if (custType.equals(Customer.US)) { 
     validator = new USAddress(); 
   } 
   return validator; 
逆风编程技术
 } 
}//end of class 
 

70op8i5elq39


Figure 20.2: Customer/USAddress Validator?Class Association

  但是当验证来自加拿大的客户时,就要对应用进行改进。这需要一个验证加拿大客户地址的验证类。让我们假设已经存在一个用来验证加拿大客户地址的使用工具类CAAddress。

从下面的CAAdress类的实现,可以发现CAAdress提供了客户类Customer类所需要的验证服务。但是它所提供的接口不用于客户类Customer所期望的。

  Listing 20.5: CAAdress Class with Incompatible Interface

class CAAddress { 
  public boolean isValidCanadianAddr(String inp_address, 
     String inp_pcode, String inp_prvnc) { 
   if (inp_address.trim().length() < 15) 
     return false; 
   if (inp_pcode.trim().length() != 6) 
     return false; 
   if (inp_prvnc.trim().length() < 6) 
     return false; 
   return true; 
  } 
}//end of class 

  CAAdress类提供了一个isValidCanadianAddr方法,但是Customer期望一个声明在AddressValidator接口中的isValidAddress方法。

  接口的不兼容使得Customer对象利用现有的CAAdress类是困难的。一种意见是改变CAAdress类的接口,但是可能会有其他的应用正在使用CAAdress类的这种形式。改变CAAdress类接口会影响现在使用CAAdress类的客户。

  应用适配器模式,类适配器CAAdressAdapter可以继承CAAdress类实现AddressValidator接口。

 
udtr40j091ei


  Figure 20.3: Class Adapter for the CAAddress Class
Listing 20.6: CAAddressAdapter as a Class Adapter

public class CAAddressAdapter extends CAAddress 
  implements AddressValidator { 
  public boolean isValidAddress(String inp_address, 
     String inp_zip, String inp_state) { 
    return isValidCanadianAddr(inp_address, inp_zip, 
           inp_state); 
  } 
}//end of class 

  因为适配器CAAdressAdapter实现了AddressValidator接口,客户端对象访问适配器CAAdressAdapter对象是没有任何问题的。当客户对象调用适配器实例的isValidAddress方法的时候,适配器在内部把调用传递给它继承的isValidCanadianAddr方法。

  在Customer类内部,getValidator私有方法需要扩展,以至于它可以在验证加拿大客户的时候返回一个CAAdressAdapter实例。返回的对象是多态的,USAddress和CAAddressAdapter都实现了AddressValidator接口,所以不用改变。

Listing 20.7: Customer Class Using the CAAddressAdapter Class

class Customer { 
          … 
          … 
  public boolean isValidAddress() { 
    //get an appropriate address validator 
    AddressValidator validator = getValidator(type); 
    //Polymorphic call to validate the address 
 

本文章更多内容<<上一页 - 1 - 2 - 3 - 4 - 5 - 下一页>>
相关文章

专家看台:真正的程序员天生爱数学
在PHPX对于 类 问题的回帖
微软将在Visual Studio开发平台中整合F#语言
个人网页中必不可少的十五大Web API
网站真的能够赚钱吗?
Linux操作系统中七件超厉害的武器
一个黑客的独白
解析:轻松接触SQL Server和嵌入式 SQL
Java上的PHP:对两者都好?
病毒专家-王江民不可思议的传奇
一等奖选手免试读北大清华
“我心飞扬”易语言编程大奖赛开始了
计算机时代的战争——黑客游戏
微软推出房屋3D模型制作工具:Virtual Eart
SQL Server 2008综合数据可编程性
免费午餐已经结束——软件历史性地向并发靠
微软公司2008新技术预览
易语言4.06正式版发布

相关评论


本文章所属分类:首页 新闻资讯

  热门关键字: