【设计模式】委派模式

什么是委派模式

这里我以一个简单的例子来形容,公司有大boss和部门leader以及部门里的员工,现在大boss给部门leader下达了任务,而作为部门leader肯定是对任务进行具体的规划然后委派给部门里的员工去完成。这中间的关系就类似于委派模式。作为大boss他可以不知道任务具体是哪个员工做的,甚至可以不知道员工的存在,只要以结果为导向,最终能完成任务就可以。作为部门leader相当于一个中介,全程跟进员工的工作进度,最终像大boss汇报工作。作为员工只要完成任务可以不知道任务最终是大boss 下达的。

接下来就以具体的代码来实现这样一个委派模式的关系

创建一个员工干活的接口Target

public interface Target {
    public void dosomething(String commond);
}

创建两个员工类ATarget和BTarget

用这两个员工去实现干活的接口,但是现在员工还不知道他具体需要干什么,因为是部门leader给他们分配任务。

A员工的工作类

public class ATarget implements Target {
    //A员工做具体的事情
    @Override
    public void dosomething(String commond) {
        System.out.println("A员工做具体的事情"+commond + "");
    }
}

B员工工作类

public class BTarget implements Target {
    //B员工需要做的事情
    @Override
    public void dosomething(String commond) {
        System.out.println("B员工做具体的事情"+commond);
    }
}

创建一个部门leader的类去实现Target,用这个leader去给员工分配具体的工作任务。

public class Leader implements Target {
    //领导委派员工做具体的事情
    private Map<String,Target> target = new HashMap<String, Target>();
    public Leader(){
        //领导委派员工A和员工B分别做不同的事情
        target.put("打印文件", new ATarget());
        target.put("测试项目", new BTarget());
    }
    @Override
    public void dosomething(String commond) {
        target.get(commond).dosomething(commond);
    }
}

接下来就是大boss上场,但是大boss不会去直接给做事的员工下达命令,而是给leader直接下达命令,比如下达一个打印文件的工作。

public class DelegateTest {
    public static void main(String[] args) {
        new Leader().dosomething("打印文件");
    }
}

可以看出来部门leader类是一个至关重要的类,起到了承上启下的中介作用,这就是一个委派。然后我们来运行程序,来看看大boss没有给员工直接下达工作命令,员工能否完成任务。

可以清楚的看出A员工完成了大boss交给的打印文件的任务(顺利完成任务,可以去申请加薪了)

从上面可以看出来委派模式就是静态代理和策略模式的一种特殊组合,代理模式注重的是过程,委派模式注重的是结果。策略模式注重的是可扩展(外部扩展),委派模式注重的是内部的灵活和复用(委派模式以结果为导向)。

demo:https://github.com/ciweigg2/design-pattern


文章作者: Ciwei
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Ciwei !
 上一篇
【设计模式】策略模式 【设计模式】策略模式
策略模式策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们之间可以相互替换,策略模式可以在不影响客户端的情况下发生变化。策略模式是处理算法不同变体的一种成熟模式,策略模式通过接口或抽象类封装算法的标识,即在接口中定义一个抽象方法
2019-07-23
下一篇 
【设计模式】单例模式 【设计模式】单例模式
单例模式所谓单例,通俗来说,就是天上只能有一个太阳,只能有一个月亮,所以结合到代码中,就是我们不能每次创建对象都new一个新 的对象供我们使用。所以这个对象应该被设计为共享对象,当需要创建时,只需把这个共享对象的引用赋值给变量即可。所谓
2019-07-23
  目录