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的更多相关文章
随机推荐
- 分布式拒绝服务攻击(DDoS)和僵尸网络(Botnet)
DDos和僵尸网络是相辅相成的两种攻击手段,本文仅介绍基本概念,详细请查看文末参考资料. 分布式拒绝服务攻击(DDoS) 分布式拒绝服务攻击DDoS是一种基于DoS的特殊形式的拒绝服务攻击,是一种分布 ...
- 基础分类算法_KNN算法
KNN(K-NearestNeighbor)算法 KNN算法是有监督学习中的分类算法. KNN算法很特殊,可以被认为是没有模型的算法,也可以认为其训练数据集就是模型本身. KNN算法的原理 KNN的原 ...
- Java 进阶P-3.1+P-3.2
记事本的例子 容器类有两个类型: 容器的类型 元素的类型 泛型容器类 泛型 泛型其实质就是将数据的类型参数化.通过为类.接口.及方法设置类型参数来定义泛型.泛型使一个类或一个方法可在多种不同类型的对象 ...
- 【随笔记】XR872 Codec 驱动移植和应用程序实例(附芯片调试方法)
XR872 的 SDK 是我目前接触过那么多款 MCU 的 SDK 中,唯一一个将框架和 RTOS 结合的非常完美的 SDK .无论是代码风格还是框架的设计,看起来都很赏心悦目,而且是源码开源.希望能 ...
- 一小时学会微信小程序
一小时学会微信小程序 目录 一.小程序概要 1.1.发展历史 1.2.小程序的诞生 二.微信小程序介绍 三.开发微信小程序的软件下载与初步配置 3.1.获取微信小程序的AppID 3.2.下载安装微 ...
- Node.js学习笔记----day02
认真学习,认真记录,每天都要有进步呀!!! 加油叭!!! 一.简单实现Apache功能 var http = require('http') var fs = require('fs') // 1. ...
- WSL 配置输入法
安装输入法 sudo apt install dbus-x11 im-config fonts-noto fcitx fcitx-pinyin fcitx-sunpinyin fitx-googlep ...
- Vue23 ref属性
1 简介 在js中,我们获取一个元素可以通过document.getElementById()去获取,在vue中,使用了ref属性来替代id,通过ref属性可以获取html元素以及vue组件实例对象 ...
- VMware虚拟机的简单安装和配置
一.简单了解虚拟机 虚拟机英文名(Virtual Machine)是通过软件模拟的完整计算机系统.在实体计算机中能够完成的工作在虚拟机中都能够实现.在计算机中创建虚拟机时,需要将实体机的部分硬盘和内存 ...
- Ansible 快速入门到放弃
Ansible 快速入门到放弃 最是人间留不住,朱颜辞镜花辞树. 1-Ansible 简介 Ansible是一个配置管理和配置工具,它使用SSH 连接到服务器并运行配置好的任务,服务器上只需要开启ss ...