【发布时间】:2011-02-14 16:55:10
【问题描述】:
我们正在开发一种复制工具,它可以定期将不同文件夹从客户端计算机复制到服务器计算机。
当必须复制特定文件夹时,会在客户端创建一个复制对象(由我们的服务模块),该对象通过网络将文件夹中存在的文件的内容发送到服务器。在服务器上创建一个相应的接收对象(由我们的服务模块)接收文件。
简而言之:
客户端抽象 - 复制对象(在自己的线程中运行),其职责是发送文件。 服务器端抽象 - 接收对象(在自己的线程中运行),负责接收内容并创建/更新文件。
现在,我们需要某些计数器,例如发送的总字节数、接收的总字节数、上次复制时间……对于每个被复制的文件夹,还有一个额外的要求。只要我们的服务正在运行,这些计数器就需要保持(不需要在我们的服务/机器重新启动时保持这个)。
要合并这些更改,我们正在讨论两种方法。
请注意 - 需要在复制周期中维护计数器。
方法1:对象重用
使计数器成为复制、接收对象的一部分,并在服务处于活动状态时保持接收和复制对象的活动状态。 现在对于线程,可以采取以下任何一种方法。
使对象和线程保持活动状态(线程进入睡眠状态)。现在在下一个复制周期中,对象和线程(唤醒线程)被重新使用。
允许线程退出,保留复制、接收对象。现在在下一个复制周期;复制、接收对象重新创建线程或从线程池中获取线程。
方法2:封装
将计数器封装在一个单独的类中。现在,每当实例化接收/复制对象以复制文件夹时。要么
- 传递计数器对象,更正。到文件夹作为接收/复制对象构造函数的参数。
或
- 接收/复制对象向管理器请求文件夹的计数器对象更正。
在方法 1 和方法 2 中更好,为什么?
【问题讨论】:
标签: c++ design-patterns class-design