0

我正在开发一款旨在创建类似文档的书的软件。我已经使用装饰器来实现它来添加各种功能。这是初始化的示例'

$this->chapter[i] = new ChapDecorator1(new ChapDecorator2(new Chapter(i)));

挑战在于这些装饰器是硬编码的,并且有可能对软件进行多次迭代。对新项目所做的有趣更改通常会向后移植到旧项目(现在使用装饰器并不可怕,因为所需要的只是在定义中添加另一个装饰器)。但是,这仍然需要我编辑子类代码。最佳情况是实际的内容创建者选择他们需要的功能,而不需要程序员编辑任何东西。

显然,在这种情况下,最好的做法是让 Book 使用实现 Builder 模式的对象来创建 Chapter 对象并将其包装在项目的正确装饰器中。

最后,我们遇到了我的问题,即如何让构建器对象动态且正确地处理配置顺序?装饰器的包装顺序意味着接口调用的解析顺序(LIFO)。一个例子是文档编辑跟踪是作为装饰器实现的,但出于显而易见的原因,在进行更改之前应始终首先评估以保存状态(它应该是最后一个包装器)。对于未来的开发,假设会有很多装饰器,如果每个装饰器都具有类似于优先级数据成员(整数?)的东西,那么可能需要首先解决一些可能需要构建器排序的东西?这似乎是一个可行的解决方案,但我担心如果创建了大量对优先级敏感的装饰器/模块,实现不会很健壮。例如,冲突的优先级可能需要重新编号许多类。无论如何,我会很感激人们对此事的任何想法。

第二个问题是两个装饰器是否以某种方式更改了相同的功能。这种情况应该是可能的吗?每个装饰器是否应该指定其域并遍历装饰器列表以查找冲突?

这一切都假设会有很多装饰器,并且一些项目编辑器会选择一些而不是其他的。谢谢!

4

1 回答 1

0
于 2011-12-20T12:32:42.777 回答