zoukankan      html  css  js  c++  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.需要对一个比较复杂的任务进行分解,分发执行并通过一个委派者角色将最终结果返回。

    文章待完善。

  • 相关阅读:
    MySql的约束
    这个充满恶意的世界啊,一不小心就掉里
    hack
    jQuery.rotate.js参数
    代码在ie9中不能正确执行
    ie6,ie7,ie8 css bug兼容解决方法
    常用CSS缩写语法总结
    前端CSS规范整理_转载、、、
    JS定义数组,初始化
    php js数组问题
  • 原文地址:https://www.cnblogs.com/weekstart/p/delegate.html
Copyright © 2011-2022 走看看