电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 在线教程-> JSP教程
设计迷踪:给JAVA设计开发新手的一些建议和意见(三)-JSP教程,Java基础
作者:网友供稿 点击:16
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 

【空接口的使用】

 在接口使用的时候,空接口有2种情况:
 1.类似cloneable,serializable,他们往往是做一个标记,表示需要某个功能.当然你也可以这么用,来表示你的类具有某个功能,实现了你的某个接口.
 2.你的接口继承了别的接口(非空),你的接口本身没有声明函数.这种情况一般是你不希望用户使用父接口来作为参数类型,因为他们的用途可能不同,此时就可以用空接口来实现.
 
 第一种情况我们不再多说,搜索一下关于cloneable,serializable的文章就会了解很多.
 我们来看下面的代码:

  public interface text
  {
   string gettext();
  }
  
  public interface sqltext extends text
  {
  }


 可以看到,text接口是用于返回一个字符串.而sqltext是一个空接口,它继承了text接口.也就是说sqltext也是一种text.但是我们可以知道,任何一个字符串不一定是sql字符串,所以此时声明了一个sqltext接口来用于表名当前的字符串是一个sql字符串.你的函数可以这样声明: 


  public void doquery(sqltext asqltext)

而不是这样


  
  public void doquery(text atext)

避免用户产生歧义的想法,一眼看去,就明白应该传入一个sql字符串.
 
  


【继承层次过多】
 一般来说,继承的层次不要过多,否则使用者可能会讨厌,找一个函数会很麻烦.很多java语言检查工具都建议你的继承层次不要超过3层.
 
 
【has a ,is a,不要滥用继承】

 "我是一个mp3","我有一个mp3",其实很容易分辨.但是在实际应用中,往往存在把"我有一个mp3"的情况当作"我是一个mp3",或者是为了偷懒方便而放松了对自己的要求,甚至还沾沾自喜,感觉找到一个捷径.(scud以前也干过这种事情).
 
 以前我曾经这样干过:我的逻辑类直接继承了我的数据库访问类,这样我可以直接在逻辑类里面访问:
 

  public mylogic extends mydba
  
  alogic.getint("click");
  alogic.getstring("name");
 

 看起来是非常方便,但是你的逻辑类就牢牢绑在了dba上,是一种非常不好的做法.现在我这样声明:
  

  public mylogic
   
   mydba adba;
   
   adba.getint("click");
   adba.getstring("name");
 

 其实代码改动不大,但是你的逻辑类不在牢牢绑在dba身上了,何乐而不为.
 
 其实这种现象在开发人员中间可能经常见到,我们要尽量避免.下面再来看一个例子:
 
 //一个保存分页信息的类
 

 public class pageinfo
 {
  private int page;
  private int pagecount;
  private int recperpage;
  private int reccount;  
  
  //get,set method list...
 }
 

 一般的情况是,在dao中进行分页查询,计算总记录,总页数等等,所以需要把pageinfo传给dao.而在逻辑类中,把传回来的分页信息数据推到formbean或者是action中.
 也许你会这么想,如果我的action或者formbean继承了pageinfo,岂不是要省很多事.
 
 千万别这么干.并不是所有的动作都需要分页信息,你的formbean和pageinfo没有继承的关系.也就是说formbean has a pageinfo,但是不是is a pageinfo.
 
 

【保持外观/行为一致】

 外观一致其实很容易理解,例如你用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了半天,却找不到,岂不是令人恼火!
 
 当然上面的代码比较简单,通过简单的修改就能做到行为一致,但在实际编程中,往往因为复杂的行为操作,经常会造成行为不一致,从而给开发人员带来困惑.
 

 


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·IReport与JasperReport开发详解一-JSP教程,Java技巧及代码
·JSTL(JSP标准标签库)介绍-JSP教程,资料/其它
·格式化输入日期时间控件 JieFormattedDateBox-JSP教程,Java技巧及代码
·JSTL简化JSP编码-JSP教程,Jsp/Servlet
·JUnit和单元测试入门简介-JSP教程,Java技巧及代码
·从数据库中读取一个图片并保存为一个图片文件-JSP教程,数据库相关
·Java Swing入门基础-JSP教程,Java技巧及代码
·IntelliJ IDEA培训-JSP教程,Java技巧及代码
·通过JSP的预编译消除性能瓶颈-JSP教程,Jsp/Servlet
·Java中利用JMF编写摄像头拍照程序-JSP教程,Java技巧及代码

最新文章
·J2ME中的时间处理方法
·J2ME播放声音流程简介
·J2ME开发之手机键盘使用注意问题
·J2ME 记录管理存储
·MVC模式在j2me项目中的应用(二)
·MVC模式在j2me项目中的应用(一)
·J2ME中使用记录存储系统(RMS)存储信息
·J2ME与MIDP开发(1)
·用简单的J2ME程序测试MIDlet的生命周期
·JAVA基础:提升JSP应用程序的七大绝招


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号