当前位置: 首页 > news >正文

编程-设计模式 26:业务代表模式

设计模式 26:业务代表模式

定义与目的
  • 定义:业务代表模式是一种用于分层架构中的模式,它作为一个中间层来处理业务逻辑和数据访问逻辑之间的通信。业务代表模式的主要目的是隐藏远程服务和本地服务之间的差异,并提供一个统一的接口给调用者。
  • 目的:该模式的主要目的是简化客户端对远程服务和本地服务的访问,使得客户端不需要关心服务是本地的还是远程的。
实现示例

假设我们有一个电子商务网站,需要提供两种方式来获取产品信息:一种是通过本地数据库查询,另一种是通过远程服务调用。我们可以使用业务代表模式来实现这个需求。

// 业务代表接口
interface BusinessService {String getProducts();
}// 本地服务(Enterprise Java Bean)
class EJBService implements BusinessService {@Overridepublic String getProducts() {return "Getting products from EJB service";}
}// 远程服务(Java Message Service)
class JMSService implements BusinessService {@Overridepublic String getProducts() {return "Getting products from JMS service";}
}// 业务代表
class BusinessDelegate {private BusinessService businessService;public BusinessDelegate(String serviceType) {if ("EJB".equals(serviceType)) {businessService = new EJBService();} else if ("JMS".equals(serviceType)) {businessService = new JMSService();}}public String getProducts() {return businessService.getProducts();}
}// 客户端代码
public class Client {public static void main(String[] args) {BusinessDelegate delegate = new BusinessDelegate("EJB");System.out.println(delegate.getProducts());delegate = new BusinessDelegate("JMS");System.out.println(delegate.getProducts());}
}
使用场景
  • 当你需要隐藏远程服务和本地服务之间的差异时。
  • 当你想要提供一个统一的接口来访问不同的服务时。
  • 当你希望减少客户端与远程服务之间的直接依赖时。

业务代表模式通过作为中间层来处理业务逻辑和数据访问逻辑之间的通信,隐藏远程服务和本地服务之间的差异,并提供一个统一的接口给调用者。这对于需要隐藏远程服务和本地服务之间的差异的场景非常有用。

小结

业务代表模式是一种常用的J2EE模式,它可以帮助你隐藏远程服务和本地服务之间的差异,并提供一个统一的接口给调用者。这对于需要隐藏远程服务和本地服务之间的差异的场景非常有用。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Android11 关于三方应用获取su权限
  • 以Zed项目为例学习大型Rust项目的组织与管理
  • 数据结构----二叉树
  • Cairo库移植到安卓记录
  • 【登录扫码】--集成企业微信
  • todoList清单(HTML+CSS+JavaScript)
  • Linux中apache服务安装与mysql安装
  • git强制推送代码教程
  • 如何使用css写三角形
  • 操作系统(进程通信)
  • Spring 中的InitializingBean
  • C语言实现数据结构之队列
  • 基于GeoTools使用JavaFx进行矢量数据可视化实战
  • NoSQL之Redis配置与优化
  • 36集网剧《天降神医朱丹溪》电影《百草园里杏花香》在义乌启动
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【comparator, comparable】小总结
  • 【EOS】Cleos基础
  • Docker 笔记(2):Dockerfile
  • ES10 特性的完整指南
  • JavaScript HTML DOM
  • JavaScript创建对象的四种方式
  • leetcode388. Longest Absolute File Path
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Python语法速览与机器学习开发环境搭建
  • React 快速上手 - 07 前端路由 react-router
  • Vue全家桶实现一个Web App
  • 不上全站https的网站你们就等着被恶心死吧
  • 订阅Forge Viewer所有的事件
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 使用Gradle第一次构建Java程序
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 网络应用优化——时延与带宽
  • 我从编程教室毕业
  • 异步
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​业务双活的数据切换思路设计(下)
  • #pragma pack(1)
  • #在 README.md 中生成项目目录结构
  • $nextTick的使用场景介绍
  • (0)Nginx 功能特性
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (规划)24届春招和25届暑假实习路线准备规划
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (六)vue-router+UI组件库
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?