学院首页>网络编程>JSP>给JAVA设计开发新手的一些建议和意见(3)

给JAVA设计开发新手的一些建议和意见(3)

作者: 来源: 添加时间:2006-5-24 13:06:01
  
  【保持外观/行为一致】

  外观一致其实很容易理解,例如你用size()表示得到一个List的大小,那么在所有的List类中你都用size()得到它的大小,这就是外观一致。
  外观一致让用户更方便使用你的函数库,不用记住几个不同的表示同一个功能的函数名字。或者几个名字相同功能却不同的函数。那就很糟糕了。
  
  行为一致相对外观一致就相对比较难做到,但是优秀的设计师肯定会让他的成果行为一致,而不是出人意料的行为,也不是一套强行规定的行为。
  
  我们来看下面的代码:
  
  
  import java。util。HashMap;
  import java。util。Map;
    
  

  class UserInfo
  {
  private String realname;
  
  public UserInfo(String sName)
  {
  this。realname = sName;
  }
  
  public void setName(String sName)
  {
  this。realname = sName;
  }
  public String getName()
  {
  return this。realname;
  }
  }
  
  
  public class MyTest
  {
  
  Map userInfoMap = new HashMap();
  
  public void setUserInfo(String sName,UserInfo aInfo)
  {
  userInfoMap。put(sName,aInfo);
  
  userInfoMap。put(aInfo。getName(),aInfo);
  }
  
  public UserInfo getUserInfo(String sName)
  {
  return (UserInfo)userInfoMap。get(sName);
  }
  
  public static void main(String args[])
  {
  MyTest aTest = new MyTest();
  
  UserInfo aUserInfo = new UserInfo("王小二");
  
  aTest。setUserInfo("儿童团团长",aUserInfo);
  aTest。setUserInfo("三班班长",aUserInfo);
  
  UserInfo 儿童团团长 = aTest。getUserInfo("儿童团团长");
  
  if(null!=儿童团团长)
  {
  System。out。println(儿童团团长。getName());
  }
  else
  {
  System。out。println("儿童团团长 Not Found");
  }
  
  UserInfo 王小二 = aTest。getUserInfo("王小二");
  
  if(null!=王小二)
  {
  System。out。println(王小二。getName());
  }
  else
  {
  System。out。println("王小二 Not Found");
  }
  
  }
  }

  可以看到,上面的代码运行结果是"王小二",也就是说儿童团团长是王小二,王小二本身也是王小二,这一切正常。
  
  现在我们把setUserInfo里面的第一句注释掉:
  
  
  public void setUserInfo(String sName,UserInfo aInfo)
  {
  //userInfoMap。put(sName,aInfo);
  
  userInfoMap。put(aInfo。getName(),aInfo);
  }
  
  

  再次运行上面的代码,我们发现儿童团团长不存在了,但是王小二还在。还可以看出,如果找"三班班长"的话,肯定也找不到,也就是说只有依据王小二的真名才能找到王小二,其他方法就不行了。
  
  从上面的setUserInfo和getUserInfo分析,如果采用修改后的代码,我们的程序就出现了行为表现不一致,而这是令人迷惑不解的,我们set了半天,却找不到,岂不是令人恼火!
  
  当然上面的代码比较简单,通过简单的修改就能做到行为一致,但在实际编程中,往往因为复杂的行为操作,经常会造成行为不一致,从而给开发人员带来困惑。
第 2 页,共 2 页 [1] [2]
站内搜索