一句话总结:委派模式是代理模式、策略模式的一种特殊情况(全权代理、权衡)
代码演示:
package com.gupaoedu.delegate;
/**
* ClassName:YMCB
* PackageName:com.gupaoedu.delegate
* Description:
*
* @date:2020/7/20 15:32
* @author:robin
*/
public interface YMCB {
void doymcb(String commond );
}
package com.gupaoedu.delegate;
/**
* ClassName:StaffA
* PackageName:com.gupaoedu.delegate
* Description:
*
* @date:2020/7/20 15:33
* @author:robin
*/
public class StaffA implements YMCB {
@Override
public void doymcb(String commond) {
System.out.println("我是A员工,我擅长"+commond+",这"+commond+"由我来实现。");
}
}
package com.gupaoedu.delegate;
/**
* ClassName:StaffB
* PackageName:com.gupaoedu.delegate
* Description:
*
* @date:2020/7/20 15:35
* @author:robin
*/
public class StaffB implements YMCB {
@Override
public void doymcb(String commond) {
System.out.println("我是B员工,我擅长"+commond+",这"+commond+"由我来实现。");
}
}
package com.gupaoedu.delegate;
/**
* ClassName:StaffC
* PackageName:com.gupaoedu.delegate
* Description:
*
* @date:2020/7/20 15:36
* @author:robin
*/
public class StaffC implements YMCB {
@Override
public void doymcb(String commond) {
System.out.println("我是C员工,我擅长"+commond+",这"+commond+"由我来实现。");
}
}
package com.gupaoedu.delegate;
import java.util.HashMap;
import java.util.Map;
/**
* ClassName:ProjectManager
* PackageName:com.gupaoedu.delegate
* Description:
*
* @date:2020/7/20 15:31
* @author:robin
*/
public class ProjectManager implements YMCB{
Map<String,YMCB> targets=new HashMap<>();
//类似静态代理,持有各个员工的引用。
ProjectManager(){
targets.put("IOT",new StaffA());
targets.put("报表",new StaffB());
targets.put("数据库设计",new StaffC());
}
@Override
public void doymcb(String commond) {
targets.get(commond).doymcb(commond);
}
}
package com.gupaoedu.delegate;
/**
* ClassName:Boos
* PackageName:com.gupaoedu.delegate
* Description:
* 现实中的例子:
* 1)老板要开发个ERP系统(集抄电表系统)
* 2)找到项目经理;
* 3)项目经理不干活,把活分配给了多个在某领域专业的员工。 (全权去做)
*
* @date:2020/7/20 15:26
* @author:robin
*/
public class Boos {
public static void main(String[] args) {
//我是C员工,我擅长数据库设计,这数据库设计由我来实现。
// new ProjectManager().doymcb("数据库设计");
//我是A员工,我擅长IOT,这IOT由我来实现。
new ProjectManager().doymcb("IOT");
}
}
总结:代理模式注重的是过程,委派模式注重的是结果。
策略模式注重的是可扩展(外部扩展),委派模式注重的是内部的灵活和复用。
委派模式就是静态代理和策略模式一种特殊的组合。