オブジェクトの生成工程と生成するクラスを分離したパターン。
クラスを差し替えたりすることで、開発と本番環境の切り替えなどがスムーズに出来るようです。
サンプルコード
/// <summary>
/// FactoryMethodパターンのサンプルコード
/// </summary>
interface IProduct
{
string Method1();
}
public class Product1 : IProduct
{
public string Method1()
{
return "Product1.Method1()";
}
}
public class Product2 : IProduct
{
public string Method1()
{
return "Product2.Method1()";
}
}
abstract class Createor
{
abstract public IProduct FactoryMethod();
}
class Product1Creator: Createor
{
override public IProduct FactoryMethod()
{
return new Product1();
}
}
class Product2Creator: Createor
{
override public IProduct FactoryMethod()
{
return new Product2();
}
}
class Program
{
static void Main()
{
var obj1 = (new Product1Creator()).FactoryMethod();
var obj2 = (new Product2Creator()).FactoryMethod();
Console.WriteLine($"{obj1.Method1()}");
Console.WriteLine($"{obj2.Method1()}");
}
}
ほとんど初めてabstractをつかった感じがします。
FactoryMethod()でどのクラスのオブジェクトを生成するか決定しています。
コメント