类似于:老板将工作给了项目经理,项目经理委托给不同的员工,但是项目经理与员工实现相同的接口,调用相同的方法,只是项目经理在该方法中,寻找一个员工去工作,而员工才是真正干活的人。
两个角色,委托人与受托人,他们的地位是平等的,也就是都实现相同的接口,使用相同的方法。
委派模式与代理模式的区别:
委派模式是,老板告诉项目经理,指定谁完成工作,项目经理就去安排该员工工作。该员工完成后,将结果交给项目经理,项目经理交给老板。也就是说,只需要给结果就可以了,不关心具体实现。
代理模式是,代理对象跟踪任务完成的每个细节,关注过程。
委派模式与工厂模式区别:
委派模式:老板或者用户知道那个干活的人。
工厂模式:不知道哪个工厂或哪个人干活,我只要结果。
代码:
1)定义公司的工作方法接口:
package com.gupaoedu.vip.delegate;
//
public interface IExector {
//普通员工执行任务
//在公司中,员工执行任务
//规定在一周之内必须完成
void doing();
}
2)定义2个底层员工
package com.gupaoedu.vip.delegate;
//想法,用代码来描述这种想法?
//所以,写得比较简单
public class ExectorA implements IExector {
@Override
public void doing() {
System.out.println("员工A开始执行任务");
}
}
package com.gupaoedu.vip.delegate;
public class ExectorB implements IExector{
@Override
public void doing() {
System.out.println("员工B开始执行任务");
}
}
3)定义一个项目经理,该项目经理根据传入的员工,去调用员工完成工作。
package com.gupaoedu.vip.delegate;
public class Dispatcher implements IExector{
IExector exector;
Dispatcher(IExector exector){
this.exector = exector;
}
//项目经理,虽然也有执行方法
//但是他的工作职责是不一样的
public void doing() {
this.exector.doing();
}
}
4)测试类:
package com.gupaoedu.vip.delegate;
public class DispatcherTest {
public static void main(String[] args) {
Dispatcher dispatcher = new Dispatcher(new ExectorA());
//看上去好像是我们的项目经理在干活
//但实际干活的人是普通员工
//这就是典型,干活是我的,功劳是你的
dispatcher.doing();
}
}