这就是我要做的事情:
public class DataBuilder {
public DataBlock create() {
DataBlock block = new DataBlock();
for (Extender extender : this.getExtenders()) {
extender.extend(block);
}
}
}
一段时间后:
DataBlock block = new DataBuilder().create();
每个extender
都会向block
添加一些特定信息。 DataBuilder
不想知道这些扩展器的内部结构。目前,我的getExtenders()
方法查找Extender
的所有子类(在类路径中),并返回它们的实例。
工作正常,但在设计方面我不喜欢它的外观。也许我可以/应该使用一些模式,使这个结构更灵活?
答案 0 :(得分:1)
让我们假设DataBlock派生自一个名为IDataBlock的接口。每个扩展器派生自DataBlockDecorator,它派生自IDataBlock,它对DataBlock进行一些操作(在构造函数中接受IDataBlock)。这允许你做类似的事情。
IDataBlock block = new DataBlock();
for (DataBlockDecorator extender : this.getExtenders()) {
extender.extend(block);
block = extender;
}
然而,它并没有真正增加灵活性。就此而言,您的原始解决方案已经变得灵活。
答案 1 :(得分:0)
查看Decorator模式。
答案 2 :(得分:0)
装饰图案
interface BlockDeckorator
{
extend(DataBlock block);
}
class FooBlockDecoratorImpl implements BlockDecorator
{
private BlockDeckorator blockDecorator;
public FooBlockDecoratorImpl(BlockDecorator decorator)
{
this.blockDecorator = decorator;
}
public void extend(DataBlock block)
{
blockDecorator(block);
// Add my own code to do Foo afterwards (or before)
}
}