enum CarFactory {
FordCar, BuickCar;
public Car create() {
switch (this) {
case FordCar: return new FordCar();
case BuickCar: return new BuickCar();
default: throw new AssertionError("無效類型");
}
}
}
// 客戶端調用:Car car = CarFactory.BuickCar.create();
方案二:枚舉抽象方法(每個枚舉項實現各自邏輯)
enum CarFactory {
FordCar { public Car create() { return new FordCar(); } },
BuickCar { public Car create() { return new BuickCar(); } };
public abstract Car create();
}
三大核心優勢
編譯期類型安全:無需傳參,直接選擇枚舉項,不可能出現非法參數
極致性能:枚舉底層按 int 索引計算,無反射開銷,比 Class.newInstance() 快數量級
零耦合設計:客戶端僅依賴工廠枚舉,完全屏蔽具體產品類,完美符合最少知識原則
建議89:枚舉項數量限制在64個以內
EnumSet 雙實現機制深度解析
EnumSet 根據枚舉項數量自動選擇實現:
RegularEnumSet(≤64項):單個 long 位向量存儲,elements = -1L >>> -universe.length 一次位運算完成全量添加,O(1) 極致性能