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

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

相关文章

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

业务协同平台--简介

一、使用场景         1.多个系统统一在业务协同平台定义协同策略,由业务协同平台代替人工完成一系列的单据录入         2.同时业务协同平台将执行任务推送给pda、pad等执行终端,通知各人员、设备进行作业执行         3.作业过程中,可设置完成时间预警、作业节点通知,时刻了解作业进程         4.做完再给你做过程分析,给出优化建议         就问你这一套下

模版方法模式template method

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/template-method 超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。 上层接口有默认实现的方法和子类需要自己实现的方法

【iOS】MVC模式

MVC模式 MVC模式MVC模式demo MVC模式 MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。 View:该层用于存放视图,该层中我们可以对页面及控件进行布局。Model:模型一般都拥有很好的可复用性,在该层中,我们可以统一管理一些数据。Controlller:该层充当一个CPU的功能,即该应用程序

迭代器模式iterator

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/iterator 不暴露集合底层表现形式 (列表、 栈和树等) 的情况下遍历集合中所有的元素

HomeBank:开源免费的个人财务管理软件

在个人财务管理领域,找到一个既免费又开源的解决方案并非易事。HomeBank 正是这样一个项目,它不仅提供了强大的功能,还拥有一个活跃的社区,不断推动其发展和完善。 开源免费:HomeBank 是一个完全开源的项目,用户可以自由地使用、修改和分发。用户友好的界面:提供直观的图形用户界面,使得非技术用户也能轻松上手。数据导入支持:支持从 Quicken、Microsoft Money

《x86汇编语言:从实模式到保护模式》视频来了

《x86汇编语言:从实模式到保护模式》视频来了 很多朋友留言,说我的专栏《x86汇编语言:从实模式到保护模式》写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节。 毕竟我不是作者,只有作者的解读才是最权威的。 当初我学习这本书的时候,只能靠自己摸索,网上搜不到什么好资源。 如果你正在学这本书或者汇编语言,那你有福气了。 本书作者李忠老师,以此书为蓝本,录制了全套视频。 试

利用命令模式构建高效的手游后端架构

在现代手游开发中,后端架构的设计对于支持高并发、快速迭代和复杂游戏逻辑至关重要。命令模式作为一种行为设计模式,可以有效地解耦请求的发起者与接收者,提升系统的可维护性和扩展性。本文将深入探讨如何利用命令模式构建一个强大且灵活的手游后端架构。 1. 命令模式的概念与优势 命令模式通过将请求封装为对象,使得请求的发起者和接收者之间的耦合度降低。这种模式的主要优势包括: 解耦请求发起者与处理者