C#-动态创建装饰器链

最初创建时,我有一个装饰器链,如下所示:

IType calculator = new TypeADecorator(
                            new TypeBDecorator(
                                    new TypeCDecorator(
                                        new MyCalculator())));

这些装饰器中的每一个都会进行数据库查找,以获取用于计算的数据

但是,并非每次都使用所有这些装饰器.因此,潜在的冗余数据库调用将不返回任何内容

因此,我认为最好根据使用习惯来动态创建装饰器链

例如

如果我有一个表示每个被使用的布尔值:

bool useTypeA;
bool useTypeB;
bool useTypeC;

我是否能够以某种方式动态地构建必要的链?

请记住,很可能会在应用程序的整个生命周期中添加其他装饰器,因此我想提出一个非常灵活的功能.另外,虽然这里只有三个装饰器,但实际上目前大约使用了8个

解决方法:

我假设数据库查找是在decarators的构造函数中完成的,是否不会将它们推迟?是否有可能设计装饰器,使其在确实需要db值时进行数据库查找?

上一篇:java--反射和注解


下一篇:python装饰器严格执行装饰器模式吗?