三、java设计模式之委派模式深进浅出

版权声明:转载请注明出处 https://blog.csdn.net/chenmingxu438521/article/details/89449951

一、背景

尽量用最简单的白话,把概念说明白,如果那里做的不好,欢迎大家批评指正。

二、概念

1.委派模式(Delegate)需要满足的条件,虽说委派模式有点像代理模式又有点像策略模式,但是还是有一定的区别的。顺便来讲下代理模式和策略模式分别要满足的条件吧,而且在SpringMVC源码中有大量的使用。

2.代理模式(Proxy)概念:1.两个参与角色:执行者(代理人)、被代理人。

                                             2.对于被代理人来说,这件事情是一定要做的,但是我自己又不想做或者没有时间做,找代理。

                                             3.代理人必须需要获取到被代理的人的个人资料(持有被代理人的引用)。

代理模式可以用一句话概括:办事要求人,所以找代理。

3.策略模式(Strategy)概念:1.执行最终结果一样。

                                                 2.执行过程和执行逻辑不一样。

策略模式可以用一句话概括:我行我素,达到目的就行。

扫描二维码关注公众号,回复: 6083645 查看本文章

4.委派模式(Delegate)概念:1.两个参与角色,委托人和被委托人。

                                                  2.委托人和被委托人在权利上完全平等(即实现同一个接口)。

                                                  3.委托人持有被委托人的引用。

                                                  4.不关心过程,只关心结果。

委托模式可以用一句话概括:干活是你的(普通员工),功劳是我的(项目经理)。

三、实例

为了方便大家更进一步的去理解这一块,下面我将要用代码去写一个具体的小案例,这样有助于大家去理解这个东西到底是怎么用的。举一个生活化的例子,例如公司中三个层级员工,执行员工staff,项目经理manager,老板boss,老板将相对应的任务和目标和项目经理沟通,他并不关心执行员工staff执行的情况,只需要从manager这里了解项目进展和结果,项目经理manager将具体项目拆解或者分配给相对应的员工去执行,这种情况就类似一种委派模式,按照上面对委托模式进行分析的写代码实现。

四、具体实现

1.接口Stuff

public interface Stuff {
    public void doing(String command);
}

2.员工StuffA

public class StuffA implements Stuff {
    @Override
    public void doing(String command) {
        System.out.println("我是员工A,我现在开始干" + command + "工作");
    }
}

3.员工StuffB

public class StuffB implements Stuff {
    @Override
    public void doing(String command) {
        System.out.println("我是员工B,我现在开始干" + command + "工作");
    }
}

4.经理Manager

public class Manager {
    //经理所持有的项目任务
    private Map<String,Stuff> targets = new HashMap<String,Stuff>();
    //委派模式中委派者(Manager)要持有被委派者(Staff)的引用,就依靠这个构造方法
    public Manager() {
        targets.put("加密",new StuffA());
        targets.put("登录",new StuffB());
    }
    public void doing(String command){
        //获取对象new StuffA()或者new StuffB()
        targets.get(command).doing(command);
    }

}

5.Boss类

public class Boss {
    public static void main(String[] args) {
        Manager manager = new Manager();
        manager.doing("加密");
        manager.doing("登录");

    }
}

6.结果

五、结束

以上就是我对这个模式的理解,希望能帮助到你们。

Always keep the faith!!!

猜你喜欢

转载自blog.csdn.net/chenmingxu438521/article/details/89449951
今日推荐