业务代表模式(Business Delegate Pattern)用于对表示层和业务层解耦
业务代表模式用来减少通信或对表示层代码中的业务层代码的远程查询功能
在业务层中我们有以下实体:
- 客户端(Client) – 表示层代码可以是 JSP、servlet 或 UI java 代码
- 业务代表(Business Delegate) – 一个为客户端实体提供的入口类,它提供了对业务服务方法的访问
- 查询服务(LookUp Service) – 查找服务对象负责获取相关的业务实现,并提供业务对象对业务代表对象的访问
- 业务服务(Business Service) – 业务服务接口。实现了该业务服务的实体类,提供了实际的业务实现逻辑
实现
1、 创建 Client 、 BusinessDelegate 、 BusinessService 、 LookUpService 、 JMSService 和 EJBService 来表示业务代表模式中的各种实体
2、 定义类 BusinessDelegatePatternDemo 使用 BusinessDelegate 和 Client 来演示业务代表模式的用法
范例
1、 创建 BusinessService 接口
BusinessService.java
// author: 大白菜(www.cmsblogs.cn)
// Copyright © 2015-2065 www.cmsblogs.cn. All rights reserved.
package cn.cmsblogs.gof;
public interface BusinessService {
public void doProcessing();
}
2、 创建实体服务类
EJBService.java
// author: 大白菜(www.cmsblogs.cn)
// Copyright © 2015-2065 www.cmsblogs.cn. All rights reserved.
package cn.cmsblogs.gof;
public class EJBService implements BusinessService {
@Override
public void doProcessing() {
System.out.println("Processing task by invoking EJB Service");
}
}
JMSService.java
// author: 大白菜(www.cmsblogs.cn)
// Copyright © 2015-2065 www.cmsblogs.cn. All rights reserved.
package cn.cmsblogs.gof;
public class JMSService implements BusinessService {
@Override
public void doProcessing() {
System.out.println("Processing task by invoking JMS Service");
}
}
3、 创建业务查询服务
BusinessLookUp.java
// author: 大白菜(www.cmsblogs.cn)
// Copyright © 2015-2065 www.cmsblogs.cn. All rights reserved.
package cn.cmsblogs.gof;
public class BusinessLookUp {
public BusinessService getBusinessService(String serviceType){
if(serviceType.equalsIgnoreCase("EJB")){
return new EJBService();
}else {
return new JMSService();
}
}
}
4、 创建业务代表
BusinessDelegate.java
// author: 大白菜(www.cmsblogs.cn)
// Copyright © 2015-2065 www.cmsblogs.cn. All rights reserved.
package cn.cmsblogs.gof;
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();
}
}
5、 创建客户端
Client.java
// author: 大白菜(www.cmsblogs.cn)
// Copyright © 2015-2065 www.cmsblogs.cn. All rights reserved.
package cn.cmsblogs.gof;
public class Client {
BusinessDelegate businessService;
public Client(BusinessDelegate businessService){
this.businessService = businessService;
}
public void doTask(){
businessService.doTask();
}
}
6、 使用 BusinessDelegate 和 Client 类来演示业务代表模式
BusinessDelegatePatternDemo.java
// author: 大白菜(www.cmsblogs.cn)
// Copyright © 2015-2065 www.cmsblogs.cn. All rights reserved.
package cn.cmsblogs.gof;
public class BusinessDelegatePatternDemo {
public static void main(String[] args) {
BusinessDelegate businessDelegate = new BusinessDelegate();
businessDelegate.setServiceType("EJB");
Client client = new Client(businessDelegate);
client.doTask();
businessDelegate.setServiceType("JMS&ot;);
client.doTask();
}
}
编译运行以上 Java 范例,输出结果如下
$ javac -d . src/main/cn/cmsblogs/gof/BusinessDelegatePatternDemo.java
$ java cn.cmsblogs.gof.BusinessDelegatePatternDemo
Processing task by invoking EJB Service
Processing task by invoking JMS Service
最新评论
https://pan.baidu.com/s/1q3bnTncIACKoTZFxvx7BQw?pwd=ii7n
RabbitMQ精讲,项目驱动落地,分布式事务拔高 有吗?
Spring Cloud Alibaba 微服务架构实战 https://pan.baidu.com/s/1jF5voFRoeF0lYAzAPBWSbw?pwd=chqk
命令: nload
真是个良心站点哇,大公无私,爱了爱了
还可以直接搞一张映射表,存 uid | time | source_index, 第一次直接查对应的 time 选出前100, 第二次直接用 CompleteFuture 去分别用 source_in
干得漂亮,多个朋友堵条路
2021.2.2版本的不适用吧