ACTIVE OBJECT 模式(转)
ACTIVE OBJECT 模式——《敏捷软件开发 原则、模式与实践(c#版)》第21章
想法很简单。考虑代码清单1-1和代码清单1-2。ActiveObjectEngine 对象维护了一个 ICommand 对象的链表。用户可以向该引擎增加新的命令,或者调用 Run()。Run() 函数只是遍历链表,执行并去除每个命令。
代码清单1-1
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace ActiveObject
{
public class ActiveObjectEngine
{
ArrayList itsCommands = new ArrayList();
public void AddCommand(ICommand aCommand)
{
itsCommands.Add(aCommand);
}
public void Run()
{
while (itsCommands.Count > 0)
{
ICommand c = (ICommand)itsCommands[0];
itsCommands.RemoveAt(0);
c.Execute();
}
}
}
}
代码清单1-2
{
void Execute();
}
考虑一下代码清单1-3中的测试用例。它创建了一个SleepCommand 对象。其中它向 SleepCommand 的构造函数中传了一个1,000ms的延迟。接着把 SleepCommand 对象放入到 ActiveObjectEngine 中。调用了 Run() 后,它将等待指定的毫秒数。
代码清单1-3
using System;
using System.Collections.Generic;
using System.Text;
using NUnit.Framework;
namespace ActiveObject
{
[TestFixture]
public class TestSleepCommand
{
private class WakeUpCommand : ICommand
{
public bool executed = false;
public void Execute()
{
this.executed = true;
}
}
[Test]
public void TestSleep()
{
WakeUpCommand wakeup = new WakeUpCommand();
ActiveObjectEngine e = new ActiveObjectEngine();
SleepCommand c = new SleepCommand(1000, e, wakeup);
e.AddCommand(c);
DateTime start =DateTime.Now;
e.Run();
DateTime stop = DateTime.Now;
double sleepTime = (stop - start).TotalMilliseconds;
Assert.IsTrue(sleepTime >= 1000,
string.Format("SleepTime {0} expected > 1000",sleepTime.ToString()));
Assert.IsTrue(sleepTime <= 1100,
string.Format("SleepTime {0} expected < 1100", sleepTime.ToString()));
Assert.IsTrue(wakeup.executed, "Command Executed");
}
}
}
我们来仔细看看这个测试用例。SleepCommand 的构造函数有 3 个参数。
第一个:是延迟的毫秒数;
第二个:是在其中运行该命令的ActiveObjectEngine 对象;
第三个:是一个名为 wakeup 的另一个命令对象。
测试的意图是 SleepCommand 会等待指定数目的毫秒,然后执行 wakeup 命令。
代码清单1-4展示了 SleepCommand 的实现。在执行时,SleepCommand 检查自己以前是否已经执行过,如果没有,就记录下开始时间。如果没有过延迟时间,就把自己再加到 ActiveObjectEngine 中。如果过了延迟时间,就把 wakeup 命令对象加到 ActiveObjectEngine 中。
代码清单1-4
using System;
using System.Collections.Generic;
using System.Text;
namespace ActiveObject
{
public class SleepCommand : ICommand
{
private ICommand wakeupCommand = null;
private ActiveObjectEngine engine = null;
private long SleepTime = 0;
private DateTime startTime;
private bool started = false;
public SleepCommand(long milliSeconds, ActiveObjectEngine e,
ICommand wakeupCommand)
{
this.SleepTime = milliSeconds;
this.engine = e;
this.wakeupCommand = wakeupCommand;
}
public void Execute()
{
DateTime currentTime = DateTime.Now;
[转帖]ACTIVE OBJECT 模式
GoF设计模式:原型模式(Prototype Pattern)—对象的克隆-C/S开发框架
GoF设计模式:工厂模式(Factory Pattern)-C/S开发框架
GoF设计模式:职责链模式(Chain of Responsibility Pattern)—请求的链式处理-C/S开发框架
GoF设计模式:享元模式(Flyweight Pattern)—实现对象的复用-C/S开发框架
GoF设计模式:访问者模式(Visitor Pattern)—操作复杂对象结构-C/S开发框架
GoF设计模式:组合模式(Composite Pattern)—树形结构的处理-C/S开发框架
GoF设计模式:迭代器模式(Iterator Pattern)—遍历聚合对象中的元素 -C/S开发框架
GoF设计模式:单例模式(Singleton Pattern)—确保对象的唯一性-C/S开发框架
WCF开发框架默认连接:HTTP协议+Message安全模式+Windows客户端认证
WCF顶级安全:HTTPS协议SSL证书+Windows认证+TransportWithMessageCredential安全模式
WCF开发框架-客户端采用Certificate认证模式调用基于HTTPS协议的WCF接口
C/S开发框架提供类似SAP系统的快速命令,能快速打开界面窗体(Command模式)
使用观察者模式实时更新程序打开多个界面绑定组件的数据源
C#.Net 调用Delphi 编译的ActiveX COM组件(原)
C#设计模式-窗体基类模板方法定义
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
