Software_programming_EnterpriseArch_ServiceWithSingleTonFactory
19:50:31
《UML 模式和应用》 P322
系统需要支持多种第三方外部服务,例如费用计算,授权服务,库存系统,都具有不同的API, 而且还无法改变。
解决方案之一:
使用 单例模式的工厂对象,适配提供服务
1 ) Adapter
增加一层间接性对象,通过这些对象将不同的外部接口调整为在应用程序内部使用的一致接口。
(对外部服务的适配器,专业化为 资源适配器 resoure adapter
对于选定的外部服务,将使用一个特定的适配器实例来处理。
例如 针对账务系统的 SAP, 当向外部接口发出 postSale请求时,
首先通过适配器进行转换,使其能够通过 HTTPS 上的 SOAP XML 接口来访问 SAP 在局域网上提供的 WebService。
对外服务由不同的接口,那是谁创建了这些适配器,并且如何决定创建哪种类的适配器,
如果使某个领域对象来创建这些适配器,那么领域对象的职责就超过了单纯的应用逻辑(例如销售总额的计算),并且会涉及到与外部软件
构件链接相关的其他内容。
架构设计基本原则之 : 关注分离 separation of concern ,将不同关注分离或模块化为不同领域,以确保内聚。对 GRASP 高内聚原则的应用。
领域层软件对象强调相对单纯的应用逻辑职责,另外一组对象负责关注于外部系统的连接。
2) Factory
简单工厂 (Simple Factory) 或 具体工厂 (Concrete Factory) , 不属于 设计模式, 但应用极为广泛, 也是 GoF 抽象工厂的简化。
定义纯虚构的“工厂” 对象来创建对象。 优势如下
1. 分离复杂创建对象的职责,并将其分配给内聚的帮助者对象
2.隐藏潜在的复杂创建逻辑
3.允许引入提高性能的内存管理策略,例如对象缓存或再生。
3)SingleTon
对类定义静态方法 getInstance, 该方法提供了类的唯一实例,可以通过类的静态方法 getInstance 得到唯一实力的全局可见性。
使用反射或数据驱动方法能够发现正确的类: 从外部特征文件中读取外部特征

在 ServiceFactory 中,决定使用哪个类来创建的逻辑是,
String ClassName = System.getProperty("Accounting.classname");
AccountAdapter = (IAccountAdapter) Class.forName(className).newInstance();
从外部资源读取类的名称,Java 以系统特性文件作为外部元,然后动态装载这个类,此例中局部地
使用了数据驱动设计。
这种设计对于实现适配器类的变化方面做到了 防止变异原则,
无需更改工厂类的源代码,通过修改属性值并且确保新类存在于Java的类路径中。。
3. Register
public class Register{
public void initialize()
{
accountAdapter = ServiceFactory.getInstance().getAccoutnAdapter();
}
}
Software_programming_EnterpriseArch_ServiceWithSingleTonFactory的更多相关文章
随机推荐
- mysql 列约束
mysql可以对插入的数据进行特定得验证,只有满足条件才可以插入到数据表中,否则认为是非法插入: 例如:人性别只可以是男.女.年龄只能是0-100. ①主键约束查重-PRIMARY KEY,1表一个: ...
- Flutter 耗时监控 | 路由名为空原因分析
前言 最近群里遇到获取Route名为空的问题,当时没在意... 直到自己在监控页面启动耗时,需要确定当前页面是哪个从而方便标记它加载的耗时时,遇到同样 route.settings.name 为空问题 ...
- CAN2-CH32V307CAN2使用说明与CAN波特率计算方法
一.修改引脚 CH32V307CAN2的TX为PB13,RX为PB12 注意用CAN2时需要初始化CAN1的时钟. 二.配置CAN2过滤器开始的组(组号与图24-4相对应) 三.将FIFO0改为FIF ...
- drf入门规范、序列化器组件、视图组件、请求与响应
DRF框架之入门规范 本篇文章会详细介绍web开发模式.API接口及其接口测试工具.restful规范.还有经常分不清又很重要的序列化与反序列化的部分,初级交接触APIView.Request类. ...
- "万字" Java I/O 详解
Java I/O流讲解 每博一文案 谁让你读了这么多书,又知道了双水村以外还有一个大世界,如果从小你就在这个天地里,日出而作,日落而息. 那你现在就会和众乡亲抱同一理想:经过几年的辛劳,像大哥一样娶个 ...
- K3S 系列文章-5G IoT 网关设备 POD 访问报错 DNS 'i/o timeout'分析与解决
开篇 <K3s 系列文章> <Rancher 系列文章> 问题概述 20220606 5G IoT 网关设备同时安装 K3S Server, 但是 POD 却无法访问互联网地址 ...
- H3C MS4300V2配置mac地址与接口绑定
配置mac地址与接口绑定 例: <h3c>system-view //进入系统视图 [h3c]int g 1/0/45 //进入45接口 [h3c-GigabitEthernet1 ...
- 微信小程序分类菜单激活状态跟随列表滚动自动切换
这里主要用到微信小程序提供的SelectorQuery获取页面节点信息实现,组件用的是微信小程序的scroll-view 逻辑就是获取右侧盒子的节点信息,获取右侧子分类的节点信息,当子分类滑动到顶部的 ...
- JZOJ 2020.07.16【NOIP提高组】模拟
总结 这套题相比昨天,简单了不止一点 然而有的人拿了 \(300\) 多 而我只有 \(198\) 预估应该有 \(268\) 的,假了 \(70\) 分 出现了很多奇怪的 \(mistakes\) ...
- JZOJ 6799. 【2014广州市选day2】game
题目 思路 呵呵,正解并不是什么神奇的方法 而是最原始的最粗暴的最有用的最万能的----搜索 依题模拟即可 \(Code\) #include<cstdio> #include<cs ...