委派
委派模式
在常用的23种设计模式中其实面没有委派模式(delegate)的影子,但是在Spring中委派模式确实用的比较多的一种模式,Spring MVC框架中的DispatcherServlet其实就用到了委派模式,有前辈将其总结为代理模式和策略模式的组合。下面通过一个简单的实例来总结委派模式
实际应用场景
如图中所示,一个比较实际的例子,就是老板将任务委派给项目经理,项目经理将任务细化,根据每个人擅长的某一方面将细化后的任务分给指定的员工,权衡的方式(策略)有多种,而这个任务项目经理不想干,就将其代理给了各个员工,从这个层面来看委派模式就是策略模式和代理模式的组合。相关类图如下:
其中委派者为Leader,在实现过程中需要维护所有被委派者(员工)的引用。具体各个类的实现代码如下:
Boss,老板指派任务给项目经理
public class Boss {
public static void main(String[] args) {
// new Leader().dispatch("加密");
new Leader().dispatch("销售");
}
}
普通职员接口 ITarget
public interface ITarget { public void doing(String command); }
项目经理(委派者)
public class Leader {
private Map<String ,ITarget> targets = new HashMap<String ,ITarget>();
public Leader(){
targets.put("加密",new TargetA());
targets.put("销售",new TargetB());
}
public void dispatch(String command){
targets.get(command).doing(command);
}
}
两个普通职员类
public class TargetA implements ITarget{
public void doing(String command) {
System.out.println("开始进行加密算法的实现");
}
}
public class TargetB implements ITarget{
public void doing(String command) {
System.out.println("开始开发销售代码");
}
}
运行实例较为简单,这里不单独列出。
Spring MVC框架中的DispatcherServlet其实就是用到的委派模式,针对之前的MVC执行流程无法理解的handlerMAPPing其实就是这里的项目经理维护的各个员工的信息。上述实例中,为了简单,直接在构造函数中维护了相关实例的引用,但是在具体的HandlerMapping中,这一步显然要复杂的多,这个后期手动实现MVC框架的时候再进行深入探讨。
相关阅读
微艾薇微洗车是一款集合上门洗车和到店洗车、加盟模式和自营模式为一体的本地O2O汽车美容模块,其运行的原理主要是用户通过微信客
简单工厂模式该设计模式是多态的一种应用实例,简单工厂模式是有一个生产对象决定生产那一产品,例如接下来的例子中,将friut作为父类,
1、基本格局:“三个世界”,各显神通我们明确反对“三个世界”的替代论观点,这不符合现实,但是新世界的颠覆力量不可阻挡。电商10年,也
推进存量单体酒店整合,继 OYO 酒店之后「千屿Islands」
以保底换控价,共担风险,共享收益。图片来自 千屿今年 3 月 OYO 酒店全资收购了住宿品牌「千屿Islands」,在 OYO 跑通 2.0 模式后,近期
前言 ART 虚拟机执行 Java 方法主要有两种模式:quick code 模式和 Interpreter 模式 quick code 模式:执行 arm 汇编指令 Interpret