属性を定期的に追加したいのですが、他の場所で属性を生成するためのコードを変更する必要はありません。そのため、ファクトリ メソッドであると思われる次のコードを思いつきました。
//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
}
}
これにはより良いパターンがありますか?それをさらに進めて、抽象クラス Attributes で別のクラスを拡張できますか (別のクラスを抽象クラスで拡張しても問題ありませんか)? すべてのクラスが同じパターンを拡張する方がよいでしょうか?
前もって感謝します!