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

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

一 故事:

话说鸿鑫今天挺累,走到了足浴中心,接待鸿鑫的是前台张姐鸿鑫说我在某团团了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)也应该不是必要类,在例子里特点就是每个类就干一件事,但是实际代码应用中有可能会区别比较大,还是见仁见智吧。

设计模式-业务代表模式-个人思考相关推荐

  1. 【设计模式】业务代表模式

    业务代表模式(Business Delegate Pattern)用于对表示层和业务层解耦.它基本上是用来减少通信或对表示层代码中的业务层代码的远程查询功能.在业务层中我们有以下实体. 客户端(Cli ...

  2. Java业务代表模式

    业务代表模式(Business Delegate Pattern)用于对表示层和业务层解耦.它基本上是用来减少通信或对表示层代码中的业务层代码的远程查询功能.在业务层中我们有以下实体. 客户端(Cli ...

  3. 1、【设计模式】组合模式

    java设计模式之组合模式 [学习难度:★★★☆☆,使用频率:★★★★☆]  树形结构在软件中随处可见,例如操作系统中的目录结构.应用软件中的菜单.办公系统中的公司组织结构等等,如何运用面向对象的方式 ...

  4. java设计模式之组合模式(树形层级)

    java设计模式之组合模式 学习难度:★★★☆☆,使用频率:★★★★☆]  树形结构在软件中随处可见,例如操作系统中的目录结构.应用软件中的菜单.办公系统中的公司组织结构等等,如何运用面向对象的方式来 ...

  5. 换个姿势学设计模式:策略模式

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源:公众号「闻人的技术博客」 前言 前段时间,接到一个 ...

  6. python的设计模式之MVC模式

    模型-视图-控制器模式 关注点分离(Separation of Concerns,SoC)原则是软件工程相关的设计原则之一.SoC原则背后的思想是将一个应用切分成不同的部分,每个部分解决一个单独的关注 ...

  7. 10-Python与设计模式--享元模式

    10-Python与设计模式--享元模式 一.网上咖啡选购平台 假设有一个网上咖啡选购平台,客户可以在该平台上下订单订购咖啡,平台会根据用户位置进行线下配送.假设其咖啡对象构造如下: class Co ...

  8. 研磨设计模式之 策略模式--转

    http://www.uml.org.cn/sjms/201009092.asp 研磨设计模式之 策略模式   2010-09-09 作者:云飞龙行 来源:云飞龙行的blog   先感谢众多朋友的支持 ...

  9. 【Java设计模式】工厂模式

    分工越细,项目就更容易拓展 工厂模式实现了创建者和调用者分离. 设计模式是一种思想,学习设计模式可以提高你的思考角度. 面向对象设计的基本原则: OCP(开闭原则,Open-Closed Princi ...

最新文章

  1. JDK5 新特性之 可变参数的方法(2)---asList
  2. struts2教程(10)
  3. Java instanceof运算符
  4. springboot集成mybatis源码分析-mybatis的mapper执行查询时的流程(三)
  5. 为啥 .NET 自带的 JsonSerializer 无法序列化 Field ?
  6. php curl 模拟多线程,php利用curl 多线程 模拟 并发的详解
  7. Android安全问题 抢先开机启动
  8. 有很帅气的微信头像推荐吗?
  9. 如何写一个Linux精灵进程
  10. 你可能不知道的 Android Studio 小技巧之「多行编辑」
  11. IIS、MySQL、Redis环境搭建
  12. Smart3D运行过程中遇到的问题(持续更新)
  13. 深度学习实战 第7章循环神经网络笔记
  14. mysql字符集异常_mysql字符集设置出错问题
  15. c语言仿qq截图源码,C#实现属于自己的QQ截图工具
  16. 微型计算机最大的电路板是,微型计算机系统中最大的一块电路板被称作 。
  17. sqoop使用hcatalog抽取数据异常
  18. antd design mobile +react 动态生成表单
  19. 激活 MarkDownPad 2
  20. STM32使用OLED移植U8g2库

热门文章

  1. 飞腾发布高可扩展芯片腾云S2500 开启多路服务新时代
  2. 企业微信CRM管理系统的优势
  3. 局域网电脑打印机显示未连接到服务器,win7局域网连接打印机显示本地打印后台处理程序服务没有运行...
  4. 班级管理系统c语言学号姓名,c++学生成绩管理系统1、问题描述 学生信息包括:学号、姓名、性别、年龄、班级等信息。 小学生...
  5. java画哆啦A梦_java如何绘制哆啦A梦 java绘制哆啦A梦代码示例
  6. Kotlin 协程是个什么东西?
  7. 老罗锤子手机(Smartisan T1)的一些感想
  8. 51单片机控制LCD1602模块
  9. 十招电商运营技巧让你成为运营大牛
  10. Docker compose 环境变量env_file相关