角色对象模式是一种设计模式,它允许对象在运行时动态地获取和改变其行为,而无需改变其核心类结构。这种模式通过将核心对象与其可能扮演的角色分离,提供了更大的灵活性。
现象:多个角色实现了相同的方法,导致冲突 解决方案:实现明确的角色优先级或冲突解决策略
现象:动态角色分配带来运行时开销 解决方案:使用缓存或优化角色查找机制
现象:角色数量增多导致管理困难 解决方案:引入角色组合或角色组概念
// 核心对象接口
interface Person {
String getName();
void addRole(Role role);
void removeRole(Class<? extends Role> roleType);
<T extends Role> T getRole(Class<T> roleType);
}
// 角色接口
interface Role {
String roleName();
}
// 具体实现
class PersonImpl implements Person {
private String name;
private Map<Class<? extends Role>, Role> roles = new HashMap<>();
public PersonImpl(String name) {
this.name = name;
}
@Override
public String getName() {
return name;
}
@Override
public void addRole(Role role) {
roles.put(role.getClass(), role);
}
@Override
public void removeRole(Class<? extends Role> roleType) {
roles.remove(roleType);
}
@Override
public <T extends Role> T getRole(Class<T> roleType) {
return roleType.cast(roles.get(roleType));
}
}
// 具体角色
class EmployeeRole implements Role {
@Override
public String roleName() {
return "Employee";
}
public void work() {
System.out.println("Working...");
}
}
class CustomerRole implements Role {
@Override
public String roleName() {
return "Customer";
}
public void purchase() {
System.out.println("Purchasing...");
}
}
// 使用示例
public class Main {
public static void main(String[] args) {
Person person = new PersonImpl("John Doe");
// 添加员工角色
person.addRole(new EmployeeRole());
person.getRole(EmployeeRole.class).work();
// 添加客户角色
person.addRole(new CustomerRole());
person.getRole(CustomerRole.class).purchase();
// 移除员工角色
person.removeRole(EmployeeRole.class);
}
}
角色对象模式特别适用于需要高度灵活性和动态行为的系统,如工作流系统、游戏角色系统或复杂的业务应用。
没有搜到相关的文章