org.springframework.core.enums類圖
這個包按照說明是:Interfaces and classes for type-safe enum support on JDK >= 1.3。提供型別安全的列舉型別。程式碼也是相當簡單,列舉型別又分為靜態型別和通用型別。靜態型別其實跟jdk1.5引進的enum型別類似,都是以int型別做code,比如宣告一個Dog型別:
然後就可以這樣宣告列舉型別了:
同時有一個靜態列舉型別的處理類用於提取資訊:StaticLabeledEnumResolver ——這個類繼承自抽象類AbstractCachingLabeledEnumResolver,而抽象類實現了介面LabeledEnumResovler,看看這個介面就知道所謂處理類是幹什麼的了:
StaticLabeledEnumResolver 使用了單例模式,同時AbstractCachingLabeledEnumResolver定義了一個模板法方法並使用:
所謂通用性的列舉型別,是指不定義成static,並且可以靈活使用其他型別做code的列舉,比如spring已經內建的3種:ShortCodedLabeledEnum ,StringCodeLabeledEnum和LetterCodeLabeledEnum,這些類都繼承自AbstractLabeledEnum,類名已經顯示了它們的用途,不再細說。這個包完整的類圖如下:
public static class Dog extends StaticLabeledEnum {
private Dog(int code, String name) {
super(code, name);
}
}
private Dog(int code, String name) {
super(code, name);
}
}
然後就可以這樣宣告列舉型別了:
public static final Dog BORDER_COLLIE = new Dog(13, "Border Collie");
public static final Dog WHIPPET = new Dog(14, "Whippet");
public static final Dog GOLDEN_RETRIEVER = new Dog(11, null) {
// must set type to be recognized as a "Dog"
public Class getType() {
return Dog.class;
}
public String getLabel() {
return "Golden Retriever";
}
};
public static final Dog WHIPPET = new Dog(14, "Whippet");
public static final Dog GOLDEN_RETRIEVER = new Dog(11, null) {
// must set type to be recognized as a "Dog"
public Class getType() {
return Dog.class;
}
public String getLabel() {
return "Golden Retriever";
}
};
同時有一個靜態列舉型別的處理類用於提取資訊:StaticLabeledEnumResolver ——這個類繼承自抽象類AbstractCachingLabeledEnumResolver,而抽象類實現了介面LabeledEnumResovler,看看這個介面就知道所謂處理類是幹什麼的了:
public interface LabeledEnumResolver {
//獲取某個類中宣告的列舉型別,這些型別 //必須是LabeledEnum的子類
public Set getLabeledEnumSet(Class type) throws IllegalArgumentException;
public Map getLabeledEnumMap(Class type) throws IllegalArgumentException;
//根據code獲取列舉
public LabeledEnum getLabeledEnumByCode(Class type, Comparable code) throws IllegalArgumentException;
//根據lable獲取列舉
public LabeledEnum getLabeledEnumByLabel(Class type, String label) throws IllegalArgumentException;
}
//獲取某個類中宣告的列舉型別,這些型別 //必須是LabeledEnum的子類
public Set getLabeledEnumSet(Class type) throws IllegalArgumentException;
public Map getLabeledEnumMap(Class type) throws IllegalArgumentException;
//根據code獲取列舉
public LabeledEnum getLabeledEnumByCode(Class type, Comparable code) throws IllegalArgumentException;
//根據lable獲取列舉
public LabeledEnum getLabeledEnumByLabel(Class type, String label) throws IllegalArgumentException;
}
StaticLabeledEnumResolver 使用了單例模式,同時AbstractCachingLabeledEnumResolver定義了一個模板法方法並使用:
protected abstract Set findLabeledEnums(Class type);
也是一個Template Method模式應用的例子。所謂通用性的列舉型別,是指不定義成static,並且可以靈活使用其他型別做code的列舉,比如spring已經內建的3種:ShortCodedLabeledEnum ,StringCodeLabeledEnum和LetterCodeLabeledEnum,這些類都繼承自AbstractLabeledEnum,類名已經顯示了它們的用途,不再細說。這個包完整的類圖如下:
相關文章
- 類圖和物件圖物件
- UMI類圖
- 專案類圖
- 【UML之物件圖VS類圖】物件
- 圖書管理系統類圖
- Astah 使用 流程圖、類圖、時序圖AST流程圖時序圖
- 看懂UML類圖和時序圖時序圖
- UML類圖--類之間的關係
- UML類圖詳解
- UML類圖總結
- 圖片切割工具類
- git命令分類圖Git
- UML類圖關係
- 圖書管理系統設計類圖
- UML類圖(上):類、繼承和實現繼承
- UML類圖與類的關係詳解
- UML 類圖及關係
- 深入淺出UML類圖
- 類的繼承圖解繼承圖解
- PHP上傳圖片類PHP
- UML基礎系列:類圖
- NPlot開源畫圖類
- 使用Drawing 類繪圖繪圖
- 集合框架類結構圖框架
- Android 開發:使用繪製基金圖表類(帶快取的圖表類)Android快取
- UML類圖介紹&類的六大關係
- UML 剖析(2) —— 類圖關聯和時序圖時序圖
- 輕鬆理解UML用例圖時序圖類圖的教程時序圖
- java 圖片水印處理類Java
- spring boot user authorities類圖Spring Boot
- Qt類繼承關係圖QT繼承
- 【機房合作——類圖生成框架】框架
- 設計模式之UML類圖設計模式
- 全面認識UML類圖元素
- 深入淺出UML類圖(五)
- 深入淺出UML類圖(三)
- 深入淺出UML類圖(二)
- 深入淺出UML類圖(一)