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

【Java 设计模式】Business Delegate 模式:简化业务服务交互

文章目录

  • 【Java设计模式】Business Delegate模式:简化业务服务交互
    • 一、概述
    • 二、Business Delegate设计模式的别名
    • 三、Business Delegate设计模式的意图
    • 四、Business Delegate模式的详细解释及实际示例
    • 五、Java中Business Delegate模式的编程示例
    • 六、Business Delegate模式类图
    • 七、Java中何时使用Business Delegate模式
    • 八、Java中Business Delegate模式的实际应用
    • 九、Business Delegate模式的优点和权衡
    • 十、源码下载

【Java设计模式】Business Delegate模式:简化业务服务交互

一、概述

在Java开发中,Business Delegate模式是一种用于简化业务服务交互的设计模式。它在表示层和业务层之间添加了一个抽象层,确保了层与层之间的松散耦合,使服务交互更加容易。本文将详细介绍该模式的意图、解释、编程示例、适用场景以及实际应用。同时,还将提供示例代码的下载链接,方便读者进行学习和实践。

二、Business Delegate设计模式的别名

  • Service Representative

三、Business Delegate设计模式的意图

Business Delegate模式是Java中的一种结构设计模式,它在表示层和业务层之间添加了一个抽象层。通过使用该模式,我们可以实现层与层之间的松散耦合,并封装关于如何定位、连接和与构成应用程序的业务对象进行交互的知识。

四、Business Delegate模式的详细解释及实际示例

  1. 实际示例
    • 在使用Java EE的企业应用程序中,Business Delegate模式有助于管理不同业务服务之间的交互。
    • 想象一个餐厅,服务员充当顾客和厨房之间的中介。当顾客下单时,服务员将订单带到厨房,转达任何特殊要求,然后将准备好的食物带回给顾客。服务员从顾客那里抽象出厨房操作的复杂性,允许厨师专注于烹饪,而无需直接与顾客互动。这种设置允许客户服务(表示层)和厨房(业务服务)独立且高效地运行。服务员充当Business Delegate,管理通信并确保两个不同区域之间的平滑交互。
  2. 通俗解释
    • Business Delegate在表示层和业务层之间添加了一个抽象层。
  3. 维基百科解释
    • Business Delegate是一种Java EE设计模式。该模式旨在减少业务服务与连接的表示层之间的耦合,并隐藏服务的实现细节(包括EJB架构的查找和可访问性)。Business Delegates充当适配器,从表示层调用业务对象。

五、Java中Business Delegate模式的编程示例

以下Java代码演示了如何实现Business Delegate模式。该模式在需要松散耦合和高效服务交互的应用程序中特别有用。
一个手机应用程序承诺将任何存在的电影流式传输到您的设备上。它捕获用户的搜索字符串,并将其传递给Business Delegate。Business Delegate选择最合适的视频流服务并从那里播放视频。
首先,我们有一个视频流服务的抽象和两个实现。

public interface VideoStreamingService {void doProcessing();
}
@Slf4j
public class NetflixService implements VideoStreamingService {@Overridepublic void doProcessing() {LOGGER.info("NetflixService is now processing");}
}
@Slf4j
public class YouTubeService implements VideoStreamingService {@Overridepublic void doProcessing() {LOGGER.info("YouTubeService is now processing");}
}

然后,我们有一个查找服务,用于决定使用哪个视频流服务。

@Setter
public class BusinessLookup {private NetflixService netflixService;private YouTubeService youTubeService;public VideoStreamingService getBusinessService(String movie) {if (movie.toLowerCase(Locale.ROOT).contains("die hard")) {return netflixService;} else {return youTubeService;}}
}

Business Delegate使用业务查找来将电影播放请求路由到合适的视频流服务。

@Setter
public class BusinessDelegate {private BusinessLookup lookupService;public void playbackMovie(String movie) {VideoStreamingService videoStreamingService = lookupService.getBusinessService(movie);videoStreamingService.doProcessing();}
}

移动客户端使用Business Delegate来调用业务层。

public class MobileClient {private final BusinessDelegate businessDelegate;public MobileClient(BusinessDelegate businessDelegate) {this.businessDelegate = businessDelegate;}public void playbackMovie(String movie) {businessDelegate.playbackMovie(movie);}
}

最后,我们可以演示完整的示例。

public static void main(String[] args) {// 准备对象var businessDelegate = new BusinessDelegate();var businessLookup = new BusinessLookup();businessLookup.setNetflixService(new NetflixService());businessLookup.setYouTubeService(new YouTubeService());businessDelegate.setLookupService(businessLookup);// 创建客户端并使用Business Delegatevar client = new MobileClient(businessDelegate);client.playbackMovie("Die Hard 2");client.playbackMovie("Maradona: The Greatest Ever");
}

以下是控制台输出。

21:15:33.790 [main] INFO com.iluwatar.business.delegate.NetflixService - NetflixService is now processing
21:15:33.794 [main] INFO com.iluwatar.business.delegate.YouTubeService - YouTubeService is now processing

六、Business Delegate模式类图

在这里插入图片描述

七、Java中何时使用Business Delegate模式

在以下情况下使用Business Delegate模式:

  1. 需要在表示层和业务层之间实现松散耦合,或需要抽象服务查找。
  2. 想要协调对多个业务服务的调用。
  3. 想要封装服务查找和服务调用。
  4. 需要抽象和封装客户端层与业务服务之间的通信。

八、Java中Business Delegate模式的实际应用

  1. 使用Java EE的企业应用程序。
  2. 需要远程访问业务服务的应用程序。

九、Business Delegate模式的优点和权衡

  1. 优点
    • 表示层和业务层的解耦:允许客户端层和业务服务独立发展。
    • 位置透明性:客户端不受业务服务位置或实例化更改的影响。
    • 重用和可扩展性:Business Delegate对象可以被多个客户端重用,并且该模式支持负载平衡和可扩展性。
  2. 权衡
    • 复杂性:引入了额外的层和抽象,可能会增加复杂性。
    • 性能开销:额外的间接可能会导致轻微的性能损失。

十、源码下载

Business Delegate模式示例代码下载

通过本文的介绍,相信大家对Java中的Business Delegate模式有了更深入的了解。在实际开发中,合理运用该模式可以提高系统的可维护性和可扩展性,同时降低层与层之间的耦合度。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 磷酸二氢钾溶液净化除杂,除重金属
  • 前端面试手撕题收集(自用)
  • 极狐GitLab 如何管理 Kubernetes 集群?
  • 监控电脑屏幕的软件叫什么?8款好用的监控电脑屏幕的软件推荐!
  • 程序员阿龙定制开发【精选】计算机毕业设计之:基于JAVA问卷调查系统
  • 数据结构(Java实现):链表与LinkedList
  • 无法验证 Anaconda 仓库证书
  • 【系统架构设计】软件架构设计(2)
  • 云计算实训33——高并发负载均衡项目(eleme)
  • linux 工作中常用的命令
  • 标准UEFI Shell命令
  • 【论文笔记】独属于CV的注意力机制CBAM-Convolutional Block Attention Module
  • SpringBoot调用通义千问
  • Scratch编程新纪元:网络请求与数据解析的探索之旅
  • 13-springcloud gateway集成nacos实现负载均衡
  • JavaScript-如何实现克隆(clone)函数
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【node学习】协程
  • 2017前端实习生面试总结
  • 2019.2.20 c++ 知识梳理
  • C++11: atomic 头文件
  • CentOS从零开始部署Nodejs项目
  • Linux CTF 逆向入门
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • SpringCloud集成分布式事务LCN (一)
  • STAR法则
  • Transformer-XL: Unleashing the Potential of Attention Models
  • Vue ES6 Jade Scss Webpack Gulp
  • Vue2 SSR 的优化之旅
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 关于extract.autodesk.io的一些说明
  • 关于springcloud Gateway中的限流
  • 近期前端发展计划
  • 聊聊hikari连接池的leakDetectionThreshold
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 全栈开发——Linux
  • 如何选择开源的机器学习框架?
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 软件开发学习的5大技巧,你知道吗?
  • 线上 python http server profile 实践
  • 协程
  • 阿里云服务器购买完整流程
  • #FPGA(基础知识)
  • #Ubuntu(修改root信息)
  • (1)常见O(n^2)排序算法解析
  • (7)STL算法之交换赋值
  • (done) 两个矩阵 “相似” 是什么意思?
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (二十四)Flask之flask-session组件
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (六)DockerCompose安装与配置
  • (十八)SpringBoot之发送QQ邮件
  • (四)事件系统
  • (四)图像的%2线性拉伸
  • (五)MySQL的备份及恢复