• Java设计模式之委派模式(Dellegate/Dispather)


    概述:

      委派模式有点像代理模式又有点像策略模式。 区别在于代理模式注重过程,委派模式注重结果。 生活中也有很多委派模式的例子:例如公司老板给项目经理下达任务,将任务全权交给项目经理,有项目经理根据一定的策略分配给小组成员,项目经理从跟到尾。项目经理就像是一个老板授权的中介,老板不需要跟小组成员直接联系,甚至可以不知道他们的存在。就像电视剧《楚汉传奇》里面韩信说的,他可以统领100万大军,只需要10个将军,他只负责管理调度这10个将军。不需要了解每个士兵的用途。

    代码实现:

      我们干活的程序员实现公共的一个干活接口:

    /**
     * Created by gan on 2019/11/17 22:00.
     */
    public interface ITarget {
    
        void doSomething(String commond);
    }

      员工A和员工B(真正干活做事的人)实现接口做自己擅长的工作。

    public class TargetA implements Itarget {
    
        @Override
        public void doSomething(String commond) {
            System.out.println("我是员工A,我擅长加密,我现在开始干:" + commond);
        }
    }
    
    public class TargetB implements Itarget {
    
        @Override
        public void doSomething(String commond) {
            System.out.println("我是员工A,我擅长解密,我现在开始干:" + commond);
        }
    }

      项目经理持有所有小组员工的成员,他根据一定的策略选择干活的人。

    public class TeamLeader {
    
        private Map<String, Itarget> targets = new HashMap<>();
    
        /**
         * 项目经理持有小组成员名单科通选择,类似于策略模式
         */
        public TeamLeader() {
            targets.put("加密", new TargetA());
            targets.put("解密", new TargetB());
        }
    
        /**
         * “调度方法”
         */
        public void dispather(String commond) {
            targets.get(commond).doSomething(commond);
        }
    }

      Boss下达命令:

    public class Boss {
    
        public commond(String commond, TeamLeader leader) {
            leader.dispather(commond);
        }
    }

      使用:

    public class DelegateTestDemo {
    
        public static void main(String[] args) {
            Boss boss = new Boss();
            boss.commond("加密", new TeamLeader());
        }
    }

    总结:

      委派模式在实际开发中非常常用,比如我们写的Controller就是委派具体的Service干事情,Service也委派Dao干事情。 Spring中也有很多使用委派模式的地方,比如我们常见的DispatcherServlet 里面的service就大量使用委派模式

       再比如我们使用的HttpServlet里面也使用了委派模式:

     在一些框架源码中,比如Spring等,命名一Delegate结尾比如BeanDefinitionParserDelegate(根据不同的类型委派不同的逻辑解析BeanDefinition),或者是以Dispacher开头和结尾或开头的比如DispacherServlet一般都使用了委派模式。

     代码链接:https://gitee.com/ganganbobo/gps-parent

  • 相关阅读:
    blog网页模版
    Sidebyside assembly
    几种hash算法
    [软件调试学习笔记]防止栈缓冲区溢出的基于Cookie的安全检查机制
    erlang注意(经典)
    erlang 的源代码保护机制(经典)
    erlang 的源代码保护机制(经典)
    java反编译工具jad
    erlang注意(经典)
    java反编译工具jad
  • 原文地址:https://www.cnblogs.com/ganbo/p/11878840.html
Copyright © 2020-2023  润新知