5.Java设计模式-----委派模式(Delegate Pattern)

什么是委派模式?

       委派模式,并不属于23种经典的设计模式。但是在Spring框架源码中,它有多次体现。在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。

字面理解委派模式

       项目组,包括:项目经理A、程序员B和程序员C。目前甲方有个项目,需要完成一个xxx任务。首先甲方会直接找到项目经理A去谈这个项目,而不是直接找B和C。项目经理分析这个项目,发现需要两人合作来完成,所以将A1模块分给B,将A2模块分给C,由B和C来合作完成该项目。

       在该需求中,项目经理只起到了一个协调工作的作用,其实实际的工作是由B和C来完成的。由此可总结出委派模式的主要特点如下。

委派模式的主要特点

       干活是我(B和C)的,功劳是你的(A)。 项目经理属于渔翁得利型

委派模式的其他特点

        ①委派机制,类似于中介的功能

        ②持有被委托人的引用(项目经理A可以随意使唤B和C)

        ③不关心过程,只关心结果(代理模式:关心的是过程,不关心结果)

代码实现

    1.甲方现在有一个项目projectA

/**
 * 现在有一个项目projectA
 */
public interface IDelegate {
    //项目A
    public void projectA();
}

2.项目经理评估后,需要两个程序员B和C来完成 

/**
 * 程序员B
 */
public class ProgrammerB implements IDelegate{
    @Override
    public void projectA() {
        System.out.println("程序员B完成模块A");
    }
}
/**
 * 程序员C
 */
public class ProgrammerC implements IDelegate{
    @Override
    public void projectA() {
        System.out.println("程序员C完成模块B");
    }
}

3.项目经理具体的分配过程

/**
 * 项目经理A(虽然它也有工作,需要实现projectA,但是它的具体工作就是分配任务)
 */
public class ManagerA implements IDelegate{
    /**
     * 封装构造方法,来获得具体实现该需求(程序员B和C)的实例
     */
    IDelegate iDelegate;
    public ManagerA(IDelegate iDelegate) {
        this.iDelegate = iDelegate;
    }

    @Override
    public void projectA() {
        this.iDelegate.projectA();
    }
}

4.测试。即:分工完成后,项目具体的完成情况

/**
 * 需求的完成情况
 */
public class test {
    public static void main(String[] args) {
        //1.现在甲方有一个新的需求
        //2.项目经理分析完后,发现需要程序员B和C来完成
        IDelegate exuctorB = new ProgrammerB();
        IDelegate exuctorC = new ProgrammerC();
        //3.项目经理获取到B和C的引用,然后让B和C来完成工作
        new ManagerA(exuctorB).projectA();
        new ManagerA(exuctorC).projectA();
        //4.工作完成
        //5.代码看着像是项目经理A完成的,但实际是B和C完成的。即:干活是B和C,实际功劳确实A的
    }
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

扛麻袋的少年

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

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

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

打赏作者

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

抵扣说明:

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

余额充值