WEB开发网      濠电娀娼ч崐濠氬疾椤愶附鍋熸い鏍ㄧ〒闂勫嫰鏌﹀Ο渚Ц闁诲氦顕ч湁婵犲﹤楠告禍鍓х磼鏉堛劌绗氶柟宄版嚇閹晠宕归銈嗘濠电偞鍨堕幐鎾磻閹捐秮褰掓偐閻戞﹩妫勯梺鎼炲妼鐎涒晝绮嬪澶樻晝闁挎繂鏌婇敃鍌涚厵閻庢稒锚閻忥絾绻濇繝鍐ㄧ伌闁诡垰鍟村畷鐔碱敂閸♀晙绱樺┑鐐差嚟婵儳螞閸曨剚鍙忛柍鍝勬噹缁€澶嬬箾閹存繄锛嶆鐐灲閹綊宕惰濡插鏌涢妸銉ヮ劉缂佸倸绉归弫鎾绘晸閿燂拷 ---闂備焦瀵уú鈺呭箯閿燂拷
开发学院软件开发Java 演化架构和紧急设计: 利用可重用代码,第 2 部分:... 阅读

演化架构和紧急设计: 利用可重用代码,第 2 部分:捕捉惯用模式

 2010-07-19 00:00:00 来源:WEB开发网 闂備線娼уΛ鎾箯閿燂拷闂備礁鎲¢崹鐢垫崲閹扮増鍎嶆い鎺戝€甸崑鎾斥槈濞嗗秳娌紓鍌氱▌閹凤拷濠电姭鎷冮崨顓濈捕闂侀潧娲ゅú銊╁焵椤掍胶鈯曢柕鍥╁仧缁辩偤鏁撻敓锟�闂備線娼уΛ鎾箯閿燂拷  闂備胶枪缁绘鈻嶉弴銏犳瀬闁绘劖顐煎☉妯锋瀻闁归偊鍓涘▔姘舵⒑閸涘⿴娈旀繛灞傚妼閳绘捇骞嬪┑鎰濡炪倖姊婚崢褏鎲撮敓锟�
核心提示: 清单 5. MaxLength 属性声明@Retention(RetentionPolicy.RUNTIME)public@interfaceMaxLength{intlength()default0;}MaxLength 验证程序的实际功能存在于两个类中:名为 Validator 的一个抽象类

清单 5. MaxLength 属性声明

@Retention(RetentionPolicy.RUNTIME) 
public @interface MaxLength { 
 int length() default 0; 
} 

MaxLength 验证程序的实际功能存在于两个类中:名为 Validator 的一个抽象类及其具体实现 MaxLengthValidator。Validator 类出现在清单 6 中:

清单 6. 提取基于属性的 Validator 类

public abstract class Validator { 
 
  public void validate(Object obj) throws ValidationException { 
    Class clss = obj.getClass(); 
    for(Method method : clss.getMethods()) 
      if (method.isAnnotationPresent(getAnnotationType())) 
        validateMethod(obj, method, method.getAnnotation(getAnnotationType())); 
  } 
 
  protected abstract Class getAnnotationType(); 
  protected abstract void validateMethod( 
    Object obj, Method method, Annotation annotation); 
}  

该类通过查看 getAnnotationType() 来迭代类中的方法,以确定这些方法是否修饰有特定属性;当它找到一个方法时,就执行 validateMethod() 方法。MaxLengthValidator 类的实现见清单 7:

清单 7. MaxLengthValidator 类

public class MaxLengthValidator extends Validator { 
 
  protected void validateMethod(Object obj, Method method, Annotation annotation) { 
    try { 
      if (method.getName().startsWith("get")) { 
        MaxLength length = (MaxLength)annotation; 
        String value = (String)method.invoke(obj, new Object[0]); 
        if ((value != null) && (length.length() < value.length())) { 
          String string = method.getName() + " is too long." + 
            "Its length is " + value.length() + 
            " but should be no longer than " + length.length(); 
          throw new ValidationException(string); 
        } 
      } 
    } catch (Exception e) { 
      throw new ValidationException(e.getMessage()); 
 
    } 
  } 
 
  @Override 
  protected Class getAnnotationType() { 
    return MaxLength.class; 
  } 
} 

上一页  1 2 3 4 5 6 7 8  下一页

Tags:演化 架构 紧急

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接