设计模式-业务代表模式-个人思考

原文章地址:业务代表模式 | 菜鸟教程

前言:个人思考不好说对错。

一 故事:

        话说鸿鑫今天挺累,走到了足浴中心,接待鸿鑫的是前台张姐鸿鑫说我在某团团了8号技师,张姐拿过验证码,电脑上一搜,是晶晶技师,电脑通知了晶晶出来,晶晶带客人鸿鑫,上楼服务去了。

二 设计模式解析:

角色:

  • 客户端(Client)(宏鑫) - 表示层代码可以是 JSP、html,servlet 等,属于消费者
  • 业务代表(Business Delegate)(前台张姐) - 一个为客户端实体提供的入口类,它提供了对业务服务方法的访问。
  • 查询服务(LookUp Service)(电脑) - 查找服务对象负责获取相关的业务实现,并提供业务对象对业务代表对象的访问。
  • 业务服务(Business Service) (晶晶)- 具体的业务实现

代码:

服务模拟:

/**
 * 这里我们看做一个启动服务与客户端交互的过程
 */
public class BusinessDelegatePatternDemo {

    public static void main(String[] args) {

        //服务器启动
        BusinessDelegate businessDelegate = new BusinessDelegate();
        //对服务器进行动态配置
        businessDelegate.setServiceType("EJB");

        //启动客户端-这里客户端指前端页面的客户端服务启动,或者是RPC的调用方启动
        Client client = new Client(businessDelegate);

        //客户端进行操作-这里可以理解成 前端http请求 或者一个RPC调用
        client.doTask();

        //后端服务器更改配置
        businessDelegate.setServiceType("JMS");

        //客户端继续请求
        client.doTask();
    }
}

客户端:

// 对应 客户 鸿鑫
public class Client {

    BusinessDelegate businessService;

    /**
     * 客户端启动需要具体服务支撑
     * @param businessService
     */
    public Client(BusinessDelegate businessService){
        this.businessService  = businessService;
    }

    public void doTask(){
        businessService.doTask();
    }
}

服务端:

/**
 * 根据配置或参数找到对应的服务封装- 对应前台张姐
 */
public class BusinessDelegate {
    private BusinessLookUp lookupService = new BusinessLookUp();
    private BusinessService businessService;
    private String serviceType;

    public void setServiceType(String serviceType){
        this.serviceType = serviceType;
    }

    public void doTask(){
        businessService = lookupService.getBusinessService(serviceType);
        businessService.doProcessing();
    }
}
/**
 * 服务工厂,找对应的服务, 对应-电脑
 */

public class BusinessLookUp {
    public BusinessService getBusinessService(String serviceType){
        if(serviceType.equalsIgnoreCase("EJB")){
            return new EJBService();
        }else {
            return new JMSService();
        }
    }
}
/**
 * 定义了服务的接口 - 技师
 */
public interface BusinessService {
    public void doProcessing();
}

/**
 * 服务的具体实现策略 人物对应-7号技师 拉拉
 */
public class EJBService implements BusinessService {

    @Override
    public void doProcessing() {
        System.out.println("Processing task by invoking EJB Service");
    }
}
/**
 * 服务的具体实现策略 人物对应-8号技师 晶晶
 */
public class JMSService implements BusinessService {

    @Override
    public void doProcessing() {
        System.out.println("Processing task by invoking JMS Service");
    }

}

业务代表模式的作用:

        原文:用于对表示层和业务层解耦。它基本上是用来减少通信或对表示层代码中的业务层代码的远程查询功能。在业务层中我们有以下实体。

        我觉的:单纯的理解业务代表就是把有可能多次请求的一个事,简化成一次,想想一下鸿鑫自己拿电脑查看技师,然后再点电脑上的按钮叫技师,这总感觉不太对,有了前台张姐,简化了鸿鑫的操作步骤,就像前后台交互,节约交互成本。

        其他:回归代码,感觉有点像平常别人掉你一个接口RPC或http的接口,你需要后台查几个服务,用可能会根据一些动态配置或参数,选择不同的策略,最后拼接好数据给客户端。

与外观模式的异同点:

        第一次看这个设计模式感觉和外观模式挺像,但是仔细一想,外观是偏重有很多功能,有很多类,根据最少知道的原则,汇总成一个类,由客户端调用(好处,下面的更改不影响客户端调用)而业务代表模式,感觉就是你不需要知道那么多,最后给你一个结果,内部一些逻辑和策略你自己定,有很多步骤客户端不管,业务层自己搞好。

总结:感觉这个例子主要为了突出 业务代表(Business Delegate)这个类,其他的类像查询服务(LookUp Service)也应该不是必要类,在例子里特点就是每个类就干一件事,但是实际代码应用中有可能会区别比较大,还是见仁见智吧。

おすすめ

転載: blog.csdn.net/u010191034/article/details/120763878