委派模式总结

委派模式

在常用的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框架的时候再进行深入探讨。


猜你喜欢

转载自blog.csdn.net/liman65727/article/details/79720352