A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杨海波 于 2012-6-9 10:52 编辑

不用多说,写代码是程序员的份内工作,如何讲代码写的有没一些呢?
一、简化条件表达式和函数调用 条件语句要尽可能简单,分别用独立函数表示它们。 如果条件表达式根据对象类型不同而选择不同的行为,将这个条件表达式的每个分支放进一个子类内的覆写函数中,然后将原始函数声明为抽象函数。 将查询和修改函数分离 。在多线程系统中,赋值前通常需要完成检查。这个时候仍把查询修改分开,在建立一个新函数,调用各自独立的查询和修改函数,并声明为synchronized。如果未被声明为synchronized,应该将她们的可见范围限制在包级别或private级别。 尽量用函数,对象取代参数。比如常见的数值范围参数,可以用对象取代:
  1. class DateRange {
  2.     DateRange(Date start, Date end) {
  3.     _start = start;   
  4.     _end = end;
  5.   }     
  6.    Date getStart() {
  7.    return _start;     
  8. }
  9.    Date getEnd() {
  10.    return _end;  
  11.   }
复制代码
如果在创建对象时不仅仅是做简单的建构动作,将构造函数替换为工厂函数。 这样在派生子类的过程中,可以以工厂函数取代类型码。例如:
  1. static Employee create(String name) {     
  2.     try {
  3.           return (Employee) Class.forName(name).newInstance();   
  4.         } catch (Exception e) {         
  5.           throw new IllegalArgumentException( "Unable to instantiate" + name);      
  6. }
  7. }
复制代码
当调用者可以预先检查,不要用异常,而是做条件判断。
二、处理概况关系 当两个子类有相同的字段,或是有产生完全相同结果的函数,或是本体几乎一致的构造函数,将它们移至超类。 当若干客户使用类接口中的同一子集,或者两个类的接口有部分相同,将相同的子集提炼到一个独立接口中 。类之间彼此互用的方式有若干种:用到某类的所有责任区;只是用类责任区中的一个特定子集;需要与所有协助处理某些特定请求的类合作。对后两种情况,将真正用到的这部分责任分离通常很有意义。在java中可以利用接口实现上述需求。例如,TimeSheet类表示员工为客户工作的时间表,从中可以计算客户应该支付的费用,为了计算费用,TimeSheet需要知道员工级别即是否有特殊技能:
  1. double charge(Employee emp, int days) {
  2. int base - emp.getRate() * days
  3. if (emp.hasSpecialSkill())
  4. return base * 1.05 ;
  5. else return base;
  6. }
复制代码
我们可以针对员工技能级别定义一个接口:
  1. interface Billable {      
  2.    public int getRate():   
  3.    public boolean hasSpecialSkill(); }   
  4. class Employee implements Billable ...  
  5.   double charge(Billable emp, int days) {     
  6.     int base = emp.getRate() * days;   
  7.     if (emp.hasSpecialSkill())        
  8.       return base * 1.05 ;   
  9.       else return base;
  10. }
复制代码
如有一些子类,其中相应的某些函数以相同顺序执行类似的操作,将这些操作分别放进独立函数中,并保持他们都有相同的签名,于是原函数就变得相同了。然后将原函数上移至超类。

评分

参与人数 2黑马币 +40 收起 理由
职业规划-刘倩老师 + 20 很不错的分享!赞赞赞!!!
黄奕豪 + 20 赞一个!

查看全部评分

1 个回复

倒序浏览
谢谢分享,学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马