更新済み私は私の問題をよりよく説明するために例を更新しました。つまり、メソッドが常にラベルタイプを取り、ファクトリがどのタイプのラベルを作成するかを決めることができるということです。つまり、返されるラベルの種類に応じて、より多くの情報を取得する必要があるかもしれません。工場のクラスはあまりにも多くを知っています
私はプリンタに送るラベルを表すオブジェクトを返すファクトリクラスを持っています。
ファクトリクラスは次のようになります。
public class LargeLabel : ILabel
{
public string TrackingReference { get; private set; }
public LargeLabel(string trackingReference)
{
TrackingReference = trackingReference;
}
}
public class SmallLabel : ILabel
{
public string TrackingReference { get; private set; }
public SmallLabel(string trackingReference)
{
TrackingReference = trackingReference;
}
}
public class LabelFactory
{
public ILabel CreateLabel(LabelType labelType, string trackingReference)
{
switch (labelType)
{
case LabelType.Small:
return new SmallLabel(trackingReference);
case LabelType.Large:
return new LargeLabel(trackingReference);
}
}
}
は私がCustomLabelと呼ばれる新しいラベルタイプを、作成することを言います。私は工場からこれを返すようにしたいが、それはいくつかの追加データを必要とします:
public class CustomLabel : ILabel
{
public string TrackingReference { get; private set; }
public string CustomText { get; private set; }
public CustomLabel(string trackingReference, string customText)
{
TrackingReference = trackingReference;
CustomText = customText;
}
}
これは私のファクトリメソッドを変更する必要がありますを意味します
public class LabelFactory
{
public ILabel CreateLabel(LabelType labelType, string trackingReference, string customText)
{
switch (labelType)
{
case LabelType.Small:
return new SmallLabel(trackingReference);
case LabelType.Large:
return new LargeLabel(trackingReference);
case LabelType.Custom:
return new CustomLabel(trackingReference, customText);
}
}
}
工場が今必要とするので、私はこれが好きではありません最も低い共通分母に対応しますが、カスタムテキスト値を取得するには、同時にCustomLabelクラスにはが必要です。追加のファクトリメソッドをオーバーライドとして提供することもできますが、CustomLabelに値が必要であるという事実を強制したい、そうでなければ空の文字列しか与えられません。
このシナリオを実装する正しい方法は何ですか?
これは私がここで質問しようとしていたのと同じ質問だと思う:http://stackoverflow.com/questions/5562051/how-to-provide-a-plug-in-model-where-different-plug-ins- take-different-parameters –