IOU设计模式介绍及应用

原理

IOU 思想是人们在处理日常债务关系时行之有效的一种方法,即:

债务人通过可靠的第三方保管账户,向债权人发放 IOU 债务凭证;

债务人通过向第三方保管账户提交结果以终止 IOU 债务;

债权人凭此 IOU 债务凭证通过第三方保管账户履行债权并进行结果赎回。

债务人和债权人之间的债务关系,通过可靠的第三方保管账户,实现了在时间和空间上最大程度的分离和解耦。

IOU 设计模式是 IOU 思想在软件设计领域的应用,最早由 Allan Vermeulen 于 1996 年首次提出。在软件设计领域,债务关系发生在方法调用者和方法体之间,债务对象就是方法的返回结果。普通方法的调用模型是方法体同步执行然后返回结果,调用者必须等待结果返回后才能继续执行。在 IOU 设计模式下,方法体将立即返回一个 IOU 对象,并且承诺 IOU 对象最终一定会被终止,调用者在 IOU 对象被终止后可进行结果的赎回。在此期间,调用者无需等待就能够继续进行其它有价值的事务,从而达到了提高程序整体的并发性和异步性的目的。

IOU 设计模式完全不依赖于任何一种异步机制,IOU 对象的提供者可以选择任意有效的方式来执行服务并最终终止 IOU 对象,比如启用独立的线程/进程执行、驱动异步事件产生、通过远程方法调用或是等待用户终端输入等等。这是 IOU 模式具备普遍适用性的一个重要因素。

IOU 模式分析及实现

IOU 模式主要有 Iou(债务凭证)和 Escrow(第三方保管账户)两个对象,模式的实际使用时还会涉及 Caller(调用者)、Callee(被调用者)及 AsyncService(异步服务)等对象。

时序图

通过时序图,读者可以建立对 IOU 模式使用过程的初步印象。

图 1. IOU 模式时序图

时间: 2024-09-20 03:23:44

IOU设计模式介绍及应用的相关文章

几种常用的设计模式介绍(转)

   几种常用的设计模式介绍 1.    设计模式的起源 最早提出"设计模式"概念的是建筑设计大师亚力山大Alexander.在1970年他的<建筑的永恒之道>里描述了投计模式的发现,因为它已经存在了千百年之久,而现代才被通过大量的研究而被发现. 在<建筑的永恒之道>里这样描述:模式是一条由三个部分组成的通用规则:它表示了一个特定环境.一类问题和一个解决方案之间的关系.每一个模式描述了一个不断重复发生的问题,以及该问题解决方案的核心设计.   在他的另一本书&l

JSF框架中使用的设计模式介绍

设计模式可以帮助用户在更高层次上抽象细节,更好地理解体系结构.如果比较熟悉 GoF 设计模式和 JavaServer Faces (JSF) 框架,本文可以帮助您洞察 JSF 框架中使用的设计模式,深入理解其工作原理. 本文探讨了 JSF 框架中使用的设计模式.详细讨论的设计模式包括 Singleton.Model-View-Controller.Factory Method.State.Composite.Decorator.Strategy.Template Method 和 Observe

JavaScript设计模式介绍

由于JavaScript不是典型的面向对象语言,因而在实现一些经典的设计模式上也与一般语言存在差异,本文主要介绍在JavaScript中如何实现常用的设计模式. 1. 单例模式 单例模式是最常见的设计模式,在一般的OOP语言中,我们可以通过私有化构造函数实现单例模式.但由于单例模式实际上可以看做返回的是一个结构,该结构在内存中有且仅有唯一的一份,所以可以类比JavaScript中的闭包,所以可以记住闭包完成单例模式的实现: // 单例模式 var mySingleton = (function(

php设计模式介绍之工厂模式

在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象 实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造 需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需 要的对象之前必须先生成一些辅助功能的对象. 在这些情况, 新对象的建立就是一个 "过程 ",不仅是一个操作,像一部大机器中的一个齿轮传动. 问题 你如何能轻松方便地 建立这么" 复杂

php设计模式介绍之策略模式

在编写面向对象的代码的时,有些时候你需要一个能够自己根据不同的条件来引入不同的操作对象实 例.例如,一个菜单功能能够根据用户的"皮肤"首选项来决定是否采用水平的还是垂直的 排列形式,或者一个计费系统可以自行根据用户的收货地址来决定税率. 一般来讲,一个控制菜 单的对象实例包括了add(), delete(), 和 replace()等菜单元素:并通过set()进行配置,用render() 来管理显示模式.无论你想生成什么样子的菜单,你都可以用同一个对象类来处理.不同菜单的对象实 例只是

php设计模式介绍之伪对象模式

面向对象的编程之所以丰富多彩,部分是由于对象间的相互联系与作用.一个单一的对象就能封装一 个复杂的子系统,使那些很复杂的操作能够通过一些方法的调用而简化.(无所不在的数据库连接就是 这样的一个对象实例.) 然而经常有这样的情况,对象间的交互性是如此复杂以至于我们不得 不面对类似"先有鸡还是先有蛋"这样伤脑筋的问题:如何创建并测试这样一个对象,他要 么依赖于很多已创建的对象,要么依赖于其他一些难以意识到的情况,如整个数据库的创建和测试. 问题 如何分隔并测试一个与其他对象和资源有关的代码

php设计模式介绍之规范模式

在一个应用软件的成型过程中,一些意想不到的商业逻辑到处出现.比如,基于价格的考虑,这个任 务必须减少项目:而那个任务也因为销售税而必须选择合适的比率:而其它的任务也必须因为其他的特 别条件而终止.一些商业规则是简单的,只需要不到一两个布尔比较关系就够了,然而它的规则可能需 要费时的估计,需要查询数据库或者用户输入数据来引导. 通过书写代码可以把抽象(比如一条 商业规则)转化为具体可见的东西.但是抽象物(比如购物方式,税率,或者计算海运费等等)都有其 进化的方式,而且这些改变很容易难倒一个不幸运的

php设计模式介绍之迭代器模式

类中的面向对象编程封装应用逻辑.类,就是实例化的对象,每个单独的对象都有一个特定的身份和 状态.单独的对象是一种组织代码的有用方法,但通常你会处理一组对象或者集合. 属性来自 SQL 查询的一组数据就是一个集合,就像本书前面章节介绍的 Monopoly 游戏示例的对象列表. 集合不一定是均一的.图形用户界面框架中的 Window 对象可以收集任意数量的控制对象 - Menu. Slider 和 Button.并且,集合的实现可以有多种方式:PHP 数字是一个集合,但也是一个散列表,一 个链接列表

在Swift中使用Cocoa的现有设计模式介绍_Swift

使用 Cocoa 现有的一些设计模式,是帮助开发者开发一款拥有合理设计思路.稳定的性能.良好的可扩展性应用的有效方法之一.这些模式都依赖于在 Objective-C 中定义的类.因为 Swift 与 Objective-C 的互用性,所以你依然可以在 Swift 代码中使用这些设计模式.在一些情况下,你甚至可以使用 Swift 语言的特性扩展或简化这些 Cocoa 设计模式,使这些设计模式更强大.更易于使用. 委托(Delegation) 在 Swift 和 Objective-C 中,委托通常