设计模式之委派模式

1,目标

掌握委派模式,精简程序逻辑,提升代码的可读性。

2,定位

希望通过对委派模式的学习,让自己写出更加优雅的的代码

3,委派模式的定义

委派模式(Delegate pattern) 的基本作用就是负责任务的调用和分配任务,跟代理模式很像,可以看做是一种特殊情况下的静态代理的全权代理,但是代理模式注重过程,而委派模式注重结果。

不属于GOF 23种设计模式之一,属于行为型模式。

4,委派模式代码实现方式

我们以公司中大boss下方任务到项目经理,项目经理再将任务分配到具体开发人员为例子。

新建一个boss.java类

package com.packer.partten.delegate.simple;

/**
 * Created by lijianfang on 2021/10/3.
 */
public class Boss {

    public void command(String command,Leader leader){
        leader.doing(command);
    }
}

新建一个员工接口IEmployee.java,每一个员工都实现这个接口中的doing方法。

package com.packer.partten.delegate.simple;

/**
 * Created by lijianfang on 2021/10/3.
 */
public interface IEmployee {
    public void doing(String command);
}

分别新建员工A/B类

package com.packer.partten.delegate.simple;

/**
 * Created by lijianfang on 2021/10/3.
 */
public class EmployeeA implements IEmployee {
    @Override
    public void doing(String command) {
        System.out.println("我是A员工,我开始干活了,执行任务 = [" + command + "]");
    }
}
package com.packer.partten.delegate.simple;

/**
 * Created by lijianfang on 2021/10/3.
 */
public class EmployeeB implements IEmployee {
    @Override
    public void doing(String command) {
        System.out.println("我是B员工,我开始干活了,我的任务是[" + command + "]");
    }
}

创建一个项目经理类leader.java类

package com.packer.partten.delegate.simple;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by lijianfang on 2021/10/3.
 */
public class Leader {
    //预先知道每一个员工的特长,特征,分发任务
    private Map<String,IEmployee> register = new HashMap<String,IEmployee>();
    public Leader(){
        register.put("加密算法",new EmployeeA());
        register.put("架构搭建",new EmployeeB());
    }
    public void doing(String command){
        register.get(command).doing(command);
    }

}

最后新建一个测试类delegateTest.java

package com.packer.partten.delegate.simple;

/**
 * Created by lijianfang on 2021/10/3.
 */
    public class delegateTest {
    public static void main(String[] args) {
        new Boss().command("加密算法",new Leader());
        new Boss().command("架构搭建",new Leader());
    }
}

测试结果为:

我是A员工,我开始干活了,执行任务 = [加密算法]
我是B员工,我开始干活了,我的任务是[架构搭建]

Process finished with exit code 0

上一篇:week2 01


下一篇:20190202 week2