委派模式对外隐藏具体实现细节,将任务委派给具体的实现类,spring mvc的DispatcherServlet就是使用了委派模式,根据不同的路径,来调用具体对应的HandlerAdapter。
例如,一个部门由部门经理,程序员和设计师三个角色,程序员和设计师负责具体的工作,部门经理根据不同的任务来选择程序员或者设计师来执行。
public interface User {
public void work();
}
public class Programmer implements User {
@Override
public void work() {
System.out.println("java工程师开始工作");
}
}
public class Designer implements User {
@Override
public void work() {
System.out.println("架构设计师开始工作");
}
}
public class DepartmentManager {
private Map<String,User> employees = new HashMap<>();
public DepartmentManager(){
employees.put("编程",new Programmer());
employees.put("设计",new Designer());
}
public void work(String cmd){
employees.get(cmd).work();
}
}
public class TestDelegate {
public static void main(String[] args){
DepartmentManager departmentManager = new DepartmentManager();
departmentManager.work("设计");
departmentManager.work("编程");
}
}