实用枚举模式
枚举状态机模式
public enum OrderStatus {
PENDING {
@Override
public void nextStatus(Order order) {
order.setStatus(PROCESSING);
}
},
PROCESSING {
@Override
public void nextStatus(Order order) {
order.setStatus(SHIPPED);
}
},
SHIPPED {
@Override
public void nextStatus(Order order) {
order.setStatus(DELIVERED);
}
},
DELIVERED {
@Override
public void nextStatus(Order order) {
// 最终状态
}
};
public abstract void nextStatus(Order order);
}
枚举单例模式
public enum DatabaseConnection {
INSTANCE;
private Connection connection;
private DatabaseConnection() {
// 初始化数据库连接
connection = createConnection();
}
public Connection getConnection() {
return connection;
}
private Connection createConnection() {
// 实际的连接逻辑
return null;
}
}
枚举策略模式
public enum PaymentStrategy {
CREDIT_CARD {
@Override
public void pay(double amount) {
System.out.println("使用信用卡支付 " + amount);
}
},
PAYPAL {
@Override
public void pay(double amount) {
System.out.println("使用PayPal支付 " + amount);
}
},
BANK_TRANSFER {
@Override
public void pay(double amount) {
System.out.println("通过银行转账支付 " + amount);
}
};
public abstract void pay(double amount);
}
枚举验证模式
public enum ValidationRule {
EMAIL {
@Override
public boolean validate(String input) {
return input.matches("^[A-Za-z0-9+_.-]+@(.+)$");
}
},
PHONE_NUMBER {
@Override
public boolean validate(String input) {
return input.matches("^\\d{10}$");
}
},
PASSWORD {
@Override
public boolean validate(String input) {
return input.length() >= 8;
}
};
public abstract boolean validate(String input);
}
枚举配置模式
public enum AppConfiguration {
INSTANCE;
private Map<String, String> configMap = new HashMap<>();
public void setConfig(String key, String value) {
configMap.put(key, value);
}
public String getConfig(String key) {
return configMap.get(key);
}
public String getConfig(String key, String defaultValue) {
return configMap.getOrDefault(key, defaultValue);
}
}
枚举模式比较
模式 |
使用场景 |
主要优点 |
状态机 |
管理对象状态 |
封装状态转换 |
单例 |
全局资源管理 |
线程安全的单例实例 |
策略 |
算法选择 |
灵活的行为切换 |
验证 |
输入验证 |
集中式验证规则 |
配置 |
应用程序设置 |
集中式配置管理 |
枚举流程可视化
graph TD
A[Enum Pattern] --> B{Type of Pattern}
B -->|State Machine| C[Manage Object States]
B -->|Singleton| D[Ensure Single Instance]
B -->|Strategy| E[Dynamic Behavior Selection]
B -->|Validation| F[Input Validation Rules]
B -->|Configuration| G[Application Settings]
最佳实践
- 对于一组固定的相关常量使用枚举
- 利用枚举方法实现复杂行为
- 相对于传统实现,优先选择枚举模式
- 保持枚举实现专注且简单
在 LabEx,我们建议探索这些实用的枚举模式,以编写更健壮、更易于维护的 Java 代码。