pattern-委派模式

一、什么是委派模式

委派俩字很明确,谁叫谁去干什么事情,被称为委派,例如老板找给员工分配工作,这就是一种委派,只注重结果,而不注重过程。在设计模式中委派模式主要功能有任务的调度和任务的分配,是一种特殊情况下的静态代理的全权代理。

二、实际例子说明委派模式

老板--->部门经理--->员工 三者的关系:老板吩咐部门经理完成某件事情,部门经理根据每个人的特征,去分配工作,员工则执行经理分发的任务。这种场景就是现实生活中的委派模式,下面使用java代码完成这几者的关系。

三、代码如何实现

捋思路,三者有一个共同的特点,都是在做事情,此时我们可以写一个接口来让三者去实现接口,只是每个人做的事情不同而已。

/**
 * 员工接口
 */
public interface DoThings{
    /**
     * 员工做事情的接口
     * @param command
     */
    void doing(String command);

}
/**
 * 员工A
 */
public class EmployeeA implements DoThings{

    @Override
    public void doing(String command) {
        System.out.println("我是员工A, 我能删库跑路,开始"+ command);
    }
}
/**
 * 员工B
 */
public class EmployeeB implements DoThings{


    @Override
    public void doing(String command) {
        System.out.println("我是员工B, 我是杠精,开始"+ command);
    }
}

 

/**
 * 经理,也是员工,需要实现员工的事情
 */
public class Manager implements DoThings{

    private Map<String, DoThings> register = new HashMap<>();

    public Leader(){
        register.put("杠", new EmployeeA());
        register.put("删库跑路", new EmployeeB());
    }

    /**
     * 项目经理不会自己去做事情,找员工干事情
     */
    @Override
    public void doing(String command) {
        register.get(command).doing(command);
    }
}
/**
 * 老板
 */
public class Boss implements DoThings{

    /**
     * 老板需要告知经理干某件事情
     * @param command 要干的事情
     * @param m 哪一个经理
     */
    @Override
    public void doing(String command, Manager m){
        m.doing(command);
    }

}
public class DelegateTest {

    public static void main(String[] args) {
        new Boss().doing("杠", new Manager());
    }

}

最后输出的结果:我是员工B, 我是杠精,开始杠

四、SpringMVC中DispatcherServlet是如何实现

1、DispatcherServlet是什么鬼?
在SpringMVC中,DispatcherServlet是一个浏览器路由地址集中访问点,他的作用是分发请求URL到具体的java方法。还有很多功能哈,这儿就实现路由分发功能。

2、写代码

创建controller控制器

/**
 * 用户控制器
 */
public class UserController {

    public String getNameById(String userId){
        return "";
    }

}


/**
 * 登录控制器
 */
public class LoginController {

    public void login(){

    }

}


创建DispatcherServlet类

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 调度Servlet
 */
public class DispatcherServlet extends HttpServlet {

    /**
     * 重写Service方法实现调度
     * @param req  请求
     * @param resp 响应
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String uri = req.getRequestURI();
        String param = req.getParameter("para");

        switch (uri){
            case "getNameById" : new UserController().getNameById(param); break;
            case "login" : new LoginController().login(); break;
            default: break;
        }
    }
}

配置web.xml

<servlet>
    <servlet-name>delegateServlet</servlet-name>
    <servlet-class>com.example.pattern.delegate.mvc.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>delegateServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

简单的委派模式就完成了,正确的理解委派模式,主要功能是完成对任务调度和分发功能

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值