![fc4fd453c6020bc0f302342e7a5aa19f.png](https://i-blog.csdnimg.cn/blog_migrate/f77c62680a5876996cf0664053d5f285.png)
委派模式的表现形式:如公司老板想举办年会,这个时候,需要很多人员参与配合,需要有人写PPT,需要有人布置会场,需要有人采购,还需要有人宣传等。这个时候,老板本人并不知道公司有哪些同事擅长做这些事情,于是,老板就将这个艰巨的任务交给了HR,然后让HR给安排合适的任选进行工作的进行。
这就是一个比较简单易懂的委派模式的表现。
那么,看到这个,是不是感觉这个案例,似乎有那么一点点熟悉,这不是代理模式的表现形式吗?
嗯,先不急,我们就以上面提到的例子编写一个代码实例来看看。
首先,我们先定义一个boss,然后boss想做的事情呢,就是准备一下,好好开一个年会。
/**
* 老板想要筹备开年会,需要进行准备工作
*/
public interface Boss {
// 分享相关员工进行年会准备
void workAllot(String workName);
}
然后,我们再来定义一个HR小姐姐,因为HR小姐姐对每个员工相对比较熟悉,知道大家擅长做什么,方便给大家分配任务,从而把年会举办的更好。
/**
* HR小姐姐
*/
public class HrGirl implements Boss {
HashMap<String, Boss> target = new HashMap<>();
public HrGirl() {
target.put("写PPT文案", new ZhangSan());
target.put("宣传策划", new LiSi());
target.put("布置会场", new WangWu());
target.put("物资采购", new ZhaoLiu());
}
@Override
public void workAllot(String workName) {
target.get(workName).workAllot(workName);
}
}
如上代码所示,我们先定义一个Map容器,key为工作内容,value为员工实例,使用其父类的引用来接收。当执行其workAllot方法时,则根据工作内容查找出善于做这一块的员工实例,进一步交由员工来处理当前事件。
定义好了HR小姐姐后,我们再来快速定义四位员工出来。
public class ZhaoLiu implements Boss {
@Override
public void workAllot(String workName) {
System.out.println("大家好,我是员工赵六,我负责进行:" + workName + " 工作");
}
}
public class WangWu implements Boss {
@Override
public void workAllot(String workName) {
System.out.println("大家好,我是员工王五,我负责进行:" + workName + " 工作");
}
}
public class LiSi implements Boss {
@Override
public void workAllot(String workName) {
System.out.println("大家好,我是员工李四,我负责进行:" + workName + " 工作");
}
}
public class ZhangSan implements Boss {
@Override
public void workAllot(String workName) {
System.out.println("大家好,我是员工张三,我负责进行:" + workName + " 工作");
}
}
这样,我们代码就编写完成了,下面我们再来编写一个测试类来测试一下效果;
@Test
public void test() {
HrGirl hr = new HrGirl();
hr.workAllot("写PPT文案");
hr.workAllot("布置会场");
hr.workAllot("物资采购");
hr.workAllot("宣传策划");
}
输入内容:
大家好,我是员工张三,我负责进行:写PPT文案 工作
大家好,我是员工王五,我负责进行:布置会场 工作
大家好,我是员工赵六,我负责进行:物资采购 工作
大家好,我是员工李四,我负责进行:宣传策划 工作
如上所示,根据需要做的工作内容,然后交由相应员工来完成。但是整个过程中,最终幕后者boss并未参与进来,所有的工作都是HR小姐姐来处理的,HR小姐姐只是根据boss的需求来进行任务的分配。Boss并未参与到具体人员安排上面。
这就是委派模式。委派,即 委托安排;也就是boss委托hr来安排相关的事宜。
好了,我们再来看看委派模式和代理模式的相似处与不同处。我们知道,代理模式是由代理来帮你完成一些工作,而这里的委派模式,是由委派对象来帮你完成一些工作,字面上来看,好像并没有什么差别。那么,既然分为两种不同 的设计模式,那么它们俩之间肯定是有差别的。
首先,我们知道代理可以增强我们的代理目标类,比如,王婆帮西门庆安排了一场约会,这里的王婆,就是西门庆的代理了。但是,具体的参与约会的对象,依然是西门庆,而并不是王婆。所以,代理模式中,被代理类还是需要进行实际去参与行动。
而委派模式,像上面的例子,boss想举办一场豪华的年会,他只需要告诉HR小姐姐即可,接下来的所有的事情,都交给小姐姐去处理即可了,自己完全不必实际去参与到行动中。
这就是代理模式和委派模式的区别所在。
委派模式不属于我们常说的23种设计模式中,在java中,委派模式有很多的应用场景,比如:通过url访问到指定接口,通过接口名,找到xml中代码配置等等。一些广为人知的,比如:springmvc 访问地址的url与Controller层配置的url对应关系,通过url分配响应的Controller等。
相比较来说,委派模式原理结构较为清晰,学习起来也比较简单,在项目中应用场景也比较多。
2019年1月27日 21:17:56