原创

JAVA设计模式-委派模式(Delegate)

委派模式不是23种设计模式中的设计模式,它是比较常见的

场景:老板-项目经理-开发人员

老板向项目经理下达任务,项目经理让开发人员去实现(需要拿到开发人员的引用,代理模式),但是选择具体哪个开发人员是项目经理需要思考的事情(策略模式)。
以上案例中,体现了代理模式和策略模式,这就是所谓的——委派模式

file

在我们的项目中,常见使用委派模式的地方有:DispatcherServlet,Delegate结尾的类名

老板-项目经理-开发人员示例代码

老板代码
BossTest

package com.example.demo.delegate;

public class BossTest {
    public static void main(String[] args) {
        DispatcherServlet servlet = new DispatcherServlet();
        servlet.doing("发工资");
    }
}

项目经理代码(DispatcherServlet)

package com.example.demo.delegate;

import com.example.demo.delegate.controller.Driver;
import com.example.demo.delegate.controller.Employee;
import com.example.demo.delegate.controller.HR;

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

public class DispatcherServlet implements Employee {
    private Map<String,Employee> map = new HashMap<>();
    public DispatcherServlet(){
        map.put("开车",new Driver());
        map.put("发工资",new HR());
    }

    @Override
    public void doing(String command) {
        for (String key : map.keySet()) {
            if(key.equals(command)){
                map.get(key).doing(command);
                break;
            }
        }
    }
}

员工接口

package com.example.demo.delegate.controller;

public interface Employee {
    void doing(String command);
}

司机类

package com.example.demo.delegate.controller;

public class Driver implements Employee {
    @Override
    public void doing(String command) {
        System.out.println("Driver 去" + command);
    }
}

人事经理类

package com.example.demo.delegate.controller;

public class HR implements Employee {
    @Override
    public void doing(String command) {
        System.out.println("HR 去" + command);
    }
}
正文到此结束
本文目录