【デザインパターン】【C#】Factory Method パターン

 ■ FactoryMethod パターン

 説明

普通、オブジェクトを生成する場合、以下のように行う 
====
Class1 obj = new Class1();
====

しかし、FactoryMethod パターンでは以下のようにメソッドを使用して行う 
====
Class1 obj = CreateClass1();
====
オブジェクトの詳細を隠し、オブジェクトの生成処理までを行い、
使用処理と分離してくれる 

 利点

 * オブジェクトの生成処理を隠すことで、
 オブジェクトの使用者とオブジェクトの結びつきを低くなる

 => 生成するクラスの種類や作成手順などが変更した場合、
  Factory内部だけを変更するだけで、
  外部への影響を少なくできる

 => 使用したいオブジェクトがまだ作成されていない場合でも、
  ファクトリにモックオブジェクトを生成することで、
  平行して開発を進めることができる

 * 使いまわしが効くオブジェクトに適用した場合、
  毎回newする必要がなくなるため、パフォーマンスが向上する

 ■ サンプル

// 共通のインターフェイス
public interface IObject
{
    void Method1();
}

// 共通インターフェイスを継承したクラス
public class SampleClass : IObject
{
    public void Method1()
    {
        Console.WriteLine("Run");
    }
}

// 共通インターフェイスを継承したクラスのオブジェクトを作成するメソッドをもったクラス
public class SampleFactory
{
    public IObject Create()
    {
        return new SampleClass();
    }
}

// 作成したクラスを実行
private void button1_Click(object sender, EventArgs e)
{
    SampleFactory factoryOject = new SampleFactory();
    IObject obj = factoryOject.Create();
    obj.Method1();
}

 参考資料

http://www.nulab.co.jp/designPatterns/designPatterns2/designPatterns2-2.html
http://blogs.wankuma.com/masaru/archive/2007/08/28/92433.aspx