最初创建时,我有一个装饰器链,如下所示:
IType calculator = new TypeADecorator(
new TypeBDecorator(
new TypeCDecorator(
new MyCalculator())));
这些装饰器中的每一个都会进行数据库查找,以获取用于计算的数据
但是,并非每次都使用所有这些装饰器.因此,潜在的冗余数据库调用将不返回任何内容
因此,我认为最好根据使用习惯来动态创建装饰器链
例如
如果我有一个表示每个被使用的布尔值:
bool useTypeA;
bool useTypeB;
bool useTypeC;
我是否能够以某种方式动态地构建必要的链?
请记住,很可能会在应用程序的整个生命周期中添加其他装饰器,因此我想提出一个非常灵活的功能.另外,虽然这里只有三个装饰器,但实际上目前大约使用了8个
解决方法:
我假设数据库查找是在decarators的构造函数中完成的,是否不会将它们推迟?是否有可能设计装饰器,使其在确实需要db值时进行数据库查找?