一、背景
尽量用最简单的白话,把概念说明白,如果那里做的不好,欢迎大家批评指正。
二、概念
1.委派模式(Delegate)需要满足的条件,虽说委派模式有点像代理模式又有点像策略模式,但是还是有一定的区别的。顺便来讲下代理模式和策略模式分别要满足的条件吧,而且在SpringMVC源码中有大量的使用。
2.代理模式(Proxy)概念:1.两个参与角色:执行者(代理人)、被代理人。
2.对于被代理人来说,这件事情是一定要做的,但是我自己又不想做或者没有时间做,找代理。
3.代理人必须需要获取到被代理的人的个人资料(持有被代理人的引用)。
代理模式可以用一句话概括:办事要求人,所以找代理。
3.策略模式(Strategy)概念:1.执行最终结果一样。
2.执行过程和执行逻辑不一样。
策略模式可以用一句话概括:我行我素,达到目的就行。
4.委派模式(Delegate)概念:1.两个参与角色,委托人和被委托人。
2.委托人和被委托人在权利上完全平等(即实现同一个接口)。
3.委托人持有被委托人的引用。
4.不关心过程,只关心结果。
委托模式可以用一句话概括:干活是你的(普通员工),功劳是我的(项目经理)。
三、实例
为了方便大家更进一步的去理解这一块,下面我将要用代码去写一个具体的小案例,这样有助于大家去理解这个东西到底是怎么用的。举一个生活化的例子,例如公司中三个层级员工,执行员工staff,项目经理manager,老板boss,老板将相对应的任务和目标和项目经理沟通,他并不关心执行员工staff执行的情况,只需要从manager这里了解项目进展和结果,项目经理manager将具体项目拆解或者分配给相对应的员工去执行,这种情况就类似一种委派模式,按照上面对委托模式进行分析的写代码实现。
四、具体实现
1.接口Stuff
public interface Stuff {
public void doing(String command);
}
2.员工StuffA
public class StuffA implements Stuff {
@Override
public void doing(String command) {
System.out.println("我是员工A,我现在开始干" + command + "工作");
}
}
3.员工StuffB
public class StuffB implements Stuff {
@Override
public void doing(String command) {
System.out.println("我是员工B,我现在开始干" + command + "工作");
}
}
4.经理Manager
public class Manager {
//经理所持有的项目任务
private Map<String,Stuff> targets = new HashMap<String,Stuff>();
//委派模式中委派者(Manager)要持有被委派者(Staff)的引用,就依靠这个构造方法
public Manager() {
targets.put("加密",new StuffA());
targets.put("登录",new StuffB());
}
public void doing(String command){
//获取对象new StuffA()或者new StuffB()
targets.get(command).doing(command);
}
}
5.Boss类
public class Boss {
public static void main(String[] args) {
Manager manager = new Manager();
manager.doing("加密");
manager.doing("登录");
}
}
6.结果
五、结束
以上就是我对这个模式的理解,希望能帮助到你们。
Always keep the faith!!!