07.委派模式详解

 委派模式的定义

       委派模式的基本作用就是负责任务的调用和分配任务,跟代理模式很像,可以看做是一种特殊情况下的静态代理的全权代理,但是代理模式注重过程,而委派模式注重结果;不属于GOF23种设计模式之一,属于行为型模式

        代理模式是对业务逻辑的增强,会对你的业务的前后添加东西,但是委派模式不一定会这么做,注重的是结果。是通过全权代理,完成多个业务模块的调度,然后将结果返回。Spring中的DispatchServlet就是用到了委派模式。

        比如餐厅老板,会根据客人的口味让主厨出不同的菜肴,主厨会根据老板的要求,让不同菜系的厨师制作菜肴,并将菜肴返回

/**
 * 大老板:负责命令主厨做事情
 */
public class Boss {
    public void command(String command, Chef chef) {
        chef.command(command);
    }
}
/**
 * 厨师有很多个,定义抽象类的抽象方法
 */
public interface Cook {
    /**
     * 去根据命令让对应的厨师做菜
     *
     * @param command
     */
    void cook(String command);
}
/**
 * 主厨:接受Boss的命令,去向对应的厨师分发要求
 */
public class Chef {
    /**
     * 用于存储每名厨师的特长,相当于厨师的简历
     **/
    private static Map<String, Cook> cooker = new HashMap<>();
    public Chef() {
        //记录每个厨师擅长的菜系
        this.cooker.put("徽菜", new AnhuiCuisine());
        this.cooker.put("粤菜", new GudongCuisine());
        this.cooker.put("湘菜", new HunanCuisine());
    }
    /**
     * 去执行Boss的请求,调用对应的厨师去做菜
     *
     * @param command
     */
    public void command(String command) {
        this.cooker.get(command).cook(command);
    }
}
/**
 * 徽菜师傅根据命令制作美食
 */
public class AnhuiCuisine implements Cook {
    @Override
    public void cook(String command) {
        System.out.println("开始制作徽菜。。。" + command);
    }
}
/**
 * 粤菜师傅根据命令制作美食
 */
public class GudongCuisine implements Cook {
    @Override
    public void cook(String command) {
        System.out.println("开始制作粤菜。。。" + command);
    }
}
/**
 * 湘菜师傅根据命令制作美食
 */
public class HunanCuisine implements Cook {
    @Override
    public void cook(String command) {
        System.out.println("开始制作湘菜。。。" + command);
    }
}
/**
 * 委派测试
 */
public class DelegateTest {
    public static void main(String[] args) {
        new Boss().command("粤菜",new Chef());
    }
}

       从这里就可以看出,委派模式,注重的是结果,并不一定是由主厨亲自操刀来做菜。主厨将餐厅老板的要求委派给了厨师A和厨师B。主厨看上去是老板和厨师之间的一个中介,相当于静态代理一种特殊模式,全权代理。主厨在老板眼里他负责干活实际上,他分发给了下面的员工,他分配工作是需要做一种选择,合理的选择才可以,这也是主厨的作用所在。这个例子在软件公司中也是如此,需求方提出需求,项目经理负责整理需求,并分发任务到每位开发人员上,开发完成后验收任务,最后将任务展示给需求方看。

        所以说,委派模式的特征就是可以创建一个中间层的全权代理的对象,去将任务分发和转化,最后将结果统一返回

委派模式在Spring中的实现

        在Spring中,包含了Delegate或Dispatch结尾的类一般都是委派模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芦蒿炒香干

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值