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

2024-05-08 19:32

本文主要是介绍设计模式-业务代表模式-个人思考,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

一 故事:

        话说鸿鑫今天挺累,走到了足浴中心,接待鸿鑫的是前台张姐鸿鑫说我在某团团了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 {@Overridepublic void doProcessing() {System.out.println("Processing task by invoking EJB Service");}
}
/*** 服务的具体实现策略 人物对应-8号技师 晶晶*/
public class JMSService implements BusinessService {@Overridepublic void doProcessing() {System.out.println("Processing task by invoking JMS Service");}}

业务代表模式的作用:

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

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

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

与外观模式的异同点:

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

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

这篇关于设计模式-业务代表模式-个人思考的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/971227

相关文章

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

RabbitMQ工作模式中的RPC通信模式详解

《RabbitMQ工作模式中的RPC通信模式详解》在RabbitMQ中,RPC模式通过消息队列实现远程调用功能,这篇文章给大家介绍RabbitMQ工作模式之RPC通信模式,感兴趣的朋友一起看看吧... 目录RPC通信模式概述工作流程代码案例引入依赖常量类编写客户端代码编写服务端代码RPC通信模式概述在R

SQL Server身份验证模式步骤和示例代码

《SQLServer身份验证模式步骤和示例代码》SQLServer是一个广泛使用的关系数据库管理系统,通常使用两种身份验证模式:Windows身份验证和SQLServer身份验证,本文将详细介绍身份... 目录身份验证方式的概念更改身份验证方式的步骤方法一:使用SQL Server Management S

Redis高可用-主从复制、哨兵模式与集群模式详解

《Redis高可用-主从复制、哨兵模式与集群模式详解》:本文主要介绍Redis高可用-主从复制、哨兵模式与集群模式的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录Redis高可用-主从复制、哨兵模式与集群模式概要一、主从复制(Master-Slave Repli

一文带你搞懂Redis Stream的6种消息处理模式

《一文带你搞懂RedisStream的6种消息处理模式》Redis5.0版本引入的Stream数据类型,为Redis生态带来了强大而灵活的消息队列功能,本文将为大家详细介绍RedisStream的6... 目录1. 简单消费模式(Simple Consumption)基本概念核心命令实现示例使用场景优缺点2

Nginx location匹配模式与规则详解

《Nginxlocation匹配模式与规则详解》:本文主要介绍Nginxlocation匹配模式与规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、环境二、匹配模式1. 精准模式2. 前缀模式(不继续匹配正则)3. 前缀模式(继续匹配正则)4. 正则模式(大

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M