我想定期添加属性,但不必更改在其他任何地方生成它们的代码,所以我想出了以下我认为是工厂方法的方法:
//sudo code:
interace Attributes { //should this be an abstract class instead?
getFields();
//possibly more items,
}
class RangeAttribute implements Attributes
{
getFields()
{
return array('field1', 'field2');
}
}
class MatchAttribute implements Attributes
{
getFields()
{
return array('fieldA', 'field2', 'fieldB');
}
}
class AttributeFactory { // is this section the 'factory'
public Attributes createAttribute(String type) {
if (item.equals("Range")) {
return new RangeAttribute();
} else if (item.equals("Match")) {
return new MatchAttribute();
} else
return null;
}
//main
AttributeFactory attrFact = new AttributeFactory();
Attributes attribute = attrFact.createAttribute(dropdown.selection);
foreach (str in attribute.getFields())
print str; //more complex irl
首先,这是工厂方法的正确实现吗,其次,我可以将工厂方法和模板方法结合起来,类似于以下内容:
abstract class Attributes { //should this be an abstract class instead?
abstract getFields();
//possibly more items,
renderFields() {
foreach (str in attribute.getFields())
print str; //more complex irl
}
}
有没有更好的模式呢?我可以更进一步,让抽象类属性扩展另一个类(用抽象类扩展另一个类甚至可以吗)?让所有类都扩展相同的模式会更好吗?
提前致谢!