2つの異なるクラスに多くのプロパティと1つの異なるプロパティがあるシナリオがあります。工場設計パターンを使用するにはどうしたらいいですか?使用しないでください。 これらのサブクラスの内部プライベートメソッドは、これらのプロパティを使用します。クライアントコードでファクトリメソッドの設計パターンに異なるパラメータを追加して、適切な設計を実現する方法
public class RunsValidator
{
//Few common properties
public int DataSegmentID { get; set; }
public int AttributeOffset { get; set; }
}
public class ProductAttributeRunValidator : RunsValidator
{
public ProductAttributeRunValidator(string productNames)
{
this.ProdNames = productNames;
}
}
public class CategoryAttributeRunValidator : RunsValidator
{
public CategoryAttributeRunValidator(int orgIDs) : base()
{
this.totalOrgIDs = orgIDs;
}
}
//ファクトリ実装
public class RunAttributeFactory
{
public static RunsValidator GetRunValidator(string type, string productNames, int orgIds)
{
RunsValidator runValidator = null;
if(type == "Product")
{
runValidator = new ProductAttributeRunValidator(productNames);
}
else if (type == "Category")
{
runValidator = new CategoryAttributeRunValidator(orgIds);
}
else
{
runValidator = null;
}
return runValidator;
}
}
、私は、ファクトリメソッドへのパラメータ(productNames、orgIdsおよびタイプ)として送信されるべき変数へのアクセス権を持っています。私はクライアントコードの多くの場所で返されたrunValidatorにアクセスしたいと思います。タイプに基づいて一度だけ設定する必要があるからです。
これを達成する最も良い方法はどれですか?
なぜあなたは工場をまったく使用していますか?なぜクライアントはオブジェクトコンストラクタを直接使用できないのですか? –
ベースタイプにアクセスするたびに、以下のコードを複数削除したいと思います。それ以上の新しいサブタイプがある場合は、それらを容易に管理できるようにしたいので、if -elseロジックを1つの場所に保存しようとしています。 (type == "Product") (type == "Category") { runValidator = new CategoryAttributeRunValidator(orgIds); } } – user2555641