设计模式之“委派模式”?!

今天想要分享的是设计模式中的委派模式,说他是设计模式,但并不是23种设计模式之中的。

委派模式(Delegate)
应用场景:不属于23 种设计模式之一,是面向对象设计模式中常用的一种模式。这种模式的原理为类B和类A 是两个互相没有任何关系的类,B 具有和A 一模一样的方法和属性;并且调用B 中的方法,属性就是调用A 中同名的方法和属性。B 好像就是一个受A 授权委托的中介。第三方的代码不需要知道A 的存在,也不需要和A 发生直接的联系,通过B 就可以直接使用A 的功能,这样既能够使用到A 的各种功能,又能够很好的将A 保护起来了,一举两得。


如图:
设计模式之“委派模式”?!_第1张图片
image.png

综上,委派模式就是一种跟代理模式有点类似,但是他的委派类全权代理,而不是像代理模式是部分代理。与策略模式对比,策略模式注重的是外部扩展,而委派模式注重的是外部的灵活调用。

讲完委派模式的概念,下面来看一个老板委派经理去分配任务的实现:
类图如图:


设计模式之“委派模式”?!_第2张图片
image.png

下面来实现一下代码:
实现一个Target接口,这个是作为委派者和被委派者共同的接口。

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

然后实现客户端:boss

public class Boss {

    public static void main(String[] args) {
        /**
         * 客户请求(Boss)、委派者(Leader)、被委派者(ITarget)
         *
         * 委派者要持有被委派者的引用
         * 代理模式:注重的是过程   委派模式注重的是结果
         * 策略模式注重的是扩展(外部扩展),委派模式注重的是内部的灵活和复用。
         */
        new Leader().doing("加密");
    }

委派者:经理

public class Leader implements ITarget {

    private Map target=new HashMap();

    public Leader() {
        target.put("加密",new TargetA());
        target.put("登录",new TargetB());
    }

    public void doingMethod(String command){
    }

    /**项目经理自己不干活,分配给别人干活。*/
    @Override
    public void doing(String command) {
        target.get(command).doing(command);
    }
}

被委派者

public class TargetA implements ITarget{
    @Override
    public void doing(String command) {
        System.out.println("我是员工A:开始干"+command+"");
    }
}

public class TargetB implements ITarget {
    @Override
    public void doing(String command) {
        System.out.println("我是员工B:开始干"+command+"");
    }
}

执行老板对经理的委派,输出如下:
注意:这里老板不关注谁实现,只是把需要实现什么委派给经理,经理自己去分配给需要的人去工作。


设计模式之“委派模式”?!_第3张图片
image.png

感谢您阅读我的文章,如果满意可以帮我点赞,谢谢哈。
如果对文章部分还有什么见解或者疑惑,可以私信评论我,欢迎技术讨论。如果需要获取完整的文件资源,可以加我微信z985085305,获取我整理的全套笔记。

你可能感兴趣的:(设计模式之“委派模式”?!)