java设计模式-委派模式

时间:2019-10-17
本文章向大家介绍java设计模式-委派模式,主要包括java设计模式-委派模式使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

导读:

        委派模式不属于23种设计模式,在平常其他设计模式中可能也有体现。同样在现实生活中也有相关的体现,比如一个具体任务的执行,首先是经过高层领导讨论,将具体的任务委派给相关部门经理,部门经理拿到任务通知后去委派相关的员工具体执行任务,委派任务的角色实际并非具体执行任务,而是对任务分发,执行过程进行管理。

参考类图:

代码:

1.抽象的服务类接口,提供执行任务的方法

1 //公共的服务接口
2 public interface BaseService {
3     // 执行命令的方法
4     void execute();
5 }

2.具体的服务类,执行相应的任务

1 //后台代码
2 public class CodeService implements BaseService {
3 
4     @Override
5     public void execute() {
6         System.out.println("执行后台代码开发任务");
7     }
8 
9 }
1 //前台页面
2 public class FrontService implements BaseService {
3 
4     @Override
5     public void execute() {
6         System.out.println("执行前端页面设计任务");
7     }
8 
9 }

3.委派者角色,负责委派,分发任务,最后提交执行的结果

 1 //委派任务角色
 2 public class Delegator {
 3     // 用一个容器存放不同的子任务对应的执行对象
 4     Map<String, BaseService> map = new HashMap<>();
 5 
 6     // 任务的委派,分发
 7     private BaseService delegate(String msg) {
 8         map.put("前端", new FrontService());
 9         map.put("后台", new CodeService());
10         if ("后台".equals(msg)) {
11             return map.get(msg);
12         } else if ("前端".equals(msg)) {
13             return map.get(msg);
14         }
15         System.out.println("委派任务出错!");
16         return null;
17     }
18 
19     // 任务具体的执行
20     public void execute(String msg) {
21         if (delegate(msg)!=null) {
22             delegate(msg).execute();
23         }
24     }
25 
26 }

4.客户端类

 1 //客户端 ->委派任务
 2 public class Client {
 3 
 4     public static void main(String[] args) {
 5 
 6         String command1 = "前端";
 7         String command2 = "后台";
 8         Delegator delegator = new Delegator();
 9         delegator.execute(command1);
10         delegator.execute(command2);
11         delegator.execute("test");
12 
13     }
14 
15 }

效果截图:

优缺点:

优点:通过任务委派能够将一个大型的任务细化,然后通过统一管理这些子任务的完成情况实现任务的跟进,能够加快任务执行的效率。

缺点:任务委派方式需要根据任务的复杂程度进行不同的改变,在任务比较复杂的情况下可能需要进行多重委派,容易造成紊乱。

适用场景:

1. spring mvc中核心控制器DispatcherServlet的执行流程。

2.需要对一个比较复杂的任务进行分解,分发执行并通过一个委派者角色将最终结果返回。

文章待完善。

原文地址:https://www.cnblogs.com/weekstart/p/delegate.html