我试图找出,在下面的场景中最好使用哪种模式。
我为用户提供了不同类型的数据表示。用户可以选择如何在屏幕上呈现数据。
我知道,抽象工厂或工厂方法将在这里设置。但有没有办法摆脱以下:
If (SomeType == SomeTypes.DropDown)
{
return new DropDownClass();
}
有没有办法让它更抽象?
答案 0 :(得分:0)
您可以为SimpleFactories创建一个List,并依次询问每个是否可以处理Type,如果是,则让它创建组件。
看起来像这样:
interface SimpleFactory{
boolean canHandle(SomeType type);
Component create()
}
class Factory{
List<SimpleFactory) factories = ....
Component create(SomeType type){
for(f : factories)
if (f.canHandle(type) return f.create()
return null;
}
答案 1 :(得分:0)
我经常使用泛型,继承和多态的组合来确定运行时特定请求的处理程序。
当您使用this post
中描述的内容时,这一切都非常简单