今天想要分享的是设计模式中的委派模式,说他是设计模式,但并不是23种设计模式之中的。
委派模式(Delegate)
应用场景:不属于23 种设计模式之一,是面向对象设计模式中常用的一种模式。这种模式的原理为类B和类A 是两个互相没有任何关系的类,B 具有和A 一模一样的方法和属性;并且调用B 中的方法,属性就是调用A 中同名的方法和属性。B 好像就是一个受A 授权委托的中介。第三方的代码不需要知道A 的存在,也不需要和A 发生直接的联系,通过B 就可以直接使用A 的功能,这样既能够使用到A 的各种功能,又能够很好的将A 保护起来了,一举两得。


综上,委派模式就是一种跟代理模式有点类似,但是他的委派类全权代理,而不是像代理模式是部分代理。与策略模式对比,策略模式注重的是外部扩展,而委派模式注重的是外部的灵活调用。
讲完委派模式的概念,下面来看一个老板委派经理去分配任务的实现:
类图如图:

下面来实现一下代码:
实现一个Target接口,这个是作为委派者和被委派者共同的接口。
public interface ITarget {
void doing(String command);
}
然后实现客户端:boss
public class Boss {
public static void main(String[] args) {
/**
* 客户请求(Boss)、委派者(Leader)、被委派者(ITarget)
*
* 委派者要持有被委派者的引用
* 代理模式:注重的是过程 委派模式注重的是结果
* 策略模式注重的是扩展(外部扩展),委派模式注重的是内部的灵活和复用。
*/
new Leader().doing("加密");
}
委派者:经理
public class Leader implements ITarget {
private Map<String,ITarget> target=new HashMap<String,ITarget>();
public Leader() {
target.put("加密",new TargetA());
target.put("登录",new TargetB());
}
public void doingMethod(String command){
}
/**项目经理自己不干活,分配给别人干活。*/
@Override
public void doing(String command) {
target.get(command).doing(command);
}
}
被委派者
public class TargetA implements ITarget{
@Override
public void doing(String command) {
System.out.println("我是员工A:开始干"+command+"");
}
}
public class TargetB implements ITarget {
@Override
public void doing(String command) {
System.out.println("我是员工B:开始干"+command+"");
}
}
执行老板对经理的委派,输出如下:
注意:这里老板不关注谁实现,只是把需要实现什么委派给经理,经理自己去分配给需要的人去工作。

感谢您阅读我的文章,如果满意可以帮我点赞,谢谢哈。
如果对文章部分还有什么见解或者疑惑,可以私信评论我,欢迎技术讨论。如果需要获取完整的文件资源,可以加我微信z985085305,获取我整理的全套笔记。
网友评论