代理模式 委派模式 策略模式_设计模式之委派模式

fc4fd453c6020bc0f302342e7a5aa19f.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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值