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的
    }
}

 

你可能感兴趣的:(设计模式,委派模式)