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

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

相关文章

如何开启和关闭3GB模式

https://jingyan.baidu.com/article/4d58d5414dfc2f9dd4e9c082.html

十五.各设计模式总结与对比

1.各设计模式总结与对比 1.1.课程目标 1、 简要分析GoF 23种设计模式和设计原则,做整体认知。 2、 剖析Spirng的编程思想,启发思维,为之后深入学习Spring做铺垫。 3、 了解各设计模式之间的关联,解决设计模式混淆的问题。 1.2.内容定位 1、 掌握设计模式的"道" ,而不只是"术" 2、 道可道非常道,滴水石穿非一日之功,做好长期修炼的准备。 3、 不要为了

十四、观察者模式与访问者模式详解

21.观察者模式 21.1.课程目标 1、 掌握观察者模式和访问者模式的应用场景。 2、 掌握观察者模式在具体业务场景中的应用。 3、 了解访问者模式的双分派。 4、 观察者模式和访问者模式的优、缺点。 21.2.内容定位 1、 有 Swing开发经验的人群更容易理解观察者模式。 2、 访问者模式被称为最复杂的设计模式。 21.3.观察者模式 观 察 者 模 式 ( Obser

关于如何更好管理好数据库的一点思考

本文尝试从数据库设计理论、ER图简介、性能优化、避免过度设计及权限管理方面进行思考阐述。 一、数据库范式 以下通过详细的示例说明数据库范式的概念,将逐步规范化一个例子,逐级说明每个范式的要求和变换过程。 示例:学生课程登记系统 初始表格如下: 学生ID学生姓名课程ID课程名称教师教师办公室1张三101数学王老师101室2李四102英语李老师102室3王五101数学王老师101室4赵六103物理陈

智能客服到个人助理,国内AI大模型如何改变我们的生活?

引言 随着人工智能(AI)技术的高速发展,AI大模型越来越多地出现在我们的日常生活和工作中。国内的AI大模型在过去几年里取得了显著的进展,不少独创的技术点和实际应用令人瞩目。 那么,国内的AI大模型有哪些独创的技术点?它们在实际应用中又有哪些出色表现呢?此外,普通人又该如何利用这些大模型提升工作和生活的质量和效率呢?本文将为你一一解析。 一、国内AI大模型的独创技术点 多模态学习 多

在 Java 中,JDK、JRE、JVM 分别代表什么,有何关系和区别?

在Java开发的世界中,我们会经常听到JDK、JRE和JVM这三个词。它们都与Java的运行环境以及Java程序的编译和运行有关,它们之间也存在一些关联性和区别。 什么是JDK、JRE和JVM 我们来看它们分别是什么。 JDK,全称Java Development Kit,即Java开发工具包。顾名思义,JDK是用于Java开发的一套工具包,里面包含了Java的编译器javac、

六西格玛培训公司:解锁成功之门,让企业与个人共赴“嗨”途

在竞争激烈的21世纪,六西格玛培训公司手握一把神奇的钥匙,帮助企业及个人轻松开启成功的大门。 对企业来说: 产品质量飞跃:不再是偶尔的精品,而是每个产品都如同精雕细琢的艺术品,吸引无数顾客争相购买。 工作流程优化:六西格玛培训如同精准的剪刀,剪去冗余,让工作流程更加顺畅高效。 客户满意度飙升:深谙客户需求的六西格玛,帮助企业精准把握市场脉搏,让每位客户都感受到宾至如归的满意。 战略转型游刃有

iOS 到处 ipa包的时候 会有四个选项分别代表什么

如图 在 iOS 到处 ipa包的时候 会有四个选项  1.Save for iOS App Store Deployment 保存到本地 准备上传App Store 或者在越狱的iOS设备上使用 2.Save for Ad Hoc Deployment 保存到本地 准备在账号添加的可使用设备上使用(具体为在开发者账户下添加可用设备的udid),该app包是发布证书编

写一个坏越的个人天地(二)

小红书上搜了下博客,感觉好像没有让自己喜欢的。昨天刚好学了点grid布局,来试试 菜单栏直接使用el-menu 下边布局就用grid局部了,这块初步想法是轮播+你的天气和我的天气+自我介绍 天气的话,这边要先找一下有没有天气的api 我这边百度搜了个聚合的api,一天可以免费调用50次,应该是够了吧~要用代理,不然会报cors import axios from 'axios