委派模式
源码:https://github.com/GiraffePeng/design-patterns
1、定义
委派模式不属于 GOF23 种设计模式中。委派模式的基本作用就是负责任务的调用和分配任务,比如nginx的路径转发,比如spring Cloud中的网关 zuul、gateway等根据路径分发至具体的服务进行调用。委派模式在 Spring 中应用非常多,大家常用的 DispatcherServlet 其实就是用到了委派模式。
2、实现
2.1、模拟网关分发
下面我们模拟网关层的服务分发调用。
创建服务顶层接口,树立规范
//服务顶层接口
public interface IService {
public void doSomething();
}
创建具体的两个服务,订单服务和会员服务。
public class MemberService implements IService{
@Override
public void doSomething() {
System.out.println("调用会员服务");
}
}
public class OrderService implements IService{
@Override
public void doSomething() {
System.out.println("调用订单服务");
}
}
创建网关层,负责服务的分发
public class ServiceDelegate{
public static void route(String serviceKey) {
if(serviceKey.equals("member")) {
new MemberService().doSomething();
}else if(serviceKey.equals("order")){
new OrderService().doSomething();
}else {
throw new RuntimeException("404 not found ");
}
}
}
创建测试类
public class Cilent {
public static void main(String[] args) {
ServiceDelegate.route("member");
}
}
控制台打印
调用会员服务
可以看到上述的网关层使用的为if…else的逻辑去分发请求,我们还可以进行改造,使用容器式服务注册与分发。
public class ServiceDelegate{
private static Map<String,IService> serviceMap = new ConcurrentHashMap<String,IService>(){
/**
*
*/
private static final long serialVersionUID = 1L;
{
put("member", new MemberService()