設計モード学習ノート2:ファクトリメソッドモード(Factory Method)
4971 ワード
ソフトウェアシステムでは、「オブジェクト」の作成作業に直面することが多く、需要の変化により、このオブジェクトの具体的な実装は常に激しい変化に直面しているが、比較的安定したインタフェースを有し、「この変化しやすいオブジェクト」の変化を分離するための「パッケージメカニズム」を提供し、システム内の「他のオブジェクト依存」が需要の変化に伴って変化しないようにするために、この問題を解決するために工場メソッドモデルを使用することができます.
以下、簡単な自動車テストの例で工場の方法モデルを初歩的に認識します.自動車をテストするとき、テストされた自動車はよく変わるので、ベンツ、ビアディ自動車をテストしますが、どんな自動車にも共通の特徴があります.だから、これらの共通の特徴をパッケージして抽象的なクラスやインタフェースを作ることができます.自動車の抽象的なクラスは以下の通りです.
現在、テスト対象の自動車であるベンツがあります.次に、具体的なベンツ車種を作成します.
このケースで最も変化しやすいのは、テストされる自動車、すなわち特定の自動車オブジェクトを作成することです.そのため、自動車の作成を抽象化し、抽象的な自動車工場クラスを作成する必要があります.
自動車がベンツ自動車であることをテストすると、この抽象的な工場クラスの作成を実現し、具体的なベンツ自動車の作成クラスを作成することができます.
クライアント・プログラムでは、テストする必要がある自動車の工場クラスをインスタンス化するだけです.
ベンツのテストが完了したら、私たちはビアディの車をテストし続けます.私たちはビアディの車クラスを実現し、ビアディの工場クラスを実現する必要があります.クライアントプログラムでは、作成した工場を変更する必要があります.このとき、テストされた車作成工場をプロファイルに書き込む必要がある場合、では、クライアント・プログラムは変更する必要もありません.確かに、これはオブジェクト開発における「高クラスタリング低結合」の考え方に完全に達しています.これは、プロジェクト開発で設計モデルを使用する必要がある目的です.
工場方法モデルのまとめ:ファクトリメソッドモードは、主にクラスオブジェクトの使用者と特定のタイプとの結合関係を分離するために使用される.常に変化する特定のタイプに直面して、緊密な結合関係はソフトウェアの脆弱性をもたらします. ファクトリメソッドモードは、主にオブジェクト向けの手法により、作成する特定のオブジェクトの動作をサブクラスに遅延させ、変更ではなく拡張戦略を実現し、この結合関係 をより良く解決する.
次編では、実際のプロジェクト開発における工場方法モデルの具体的な応用について詳しく説明します.
以下、簡単な自動車テストの例で工場の方法モデルを初歩的に認識します.自動車をテストするとき、テストされた自動車はよく変わるので、ベンツ、ビアディ自動車をテストしますが、どんな自動車にも共通の特徴があります.だから、これらの共通の特徴をパッケージして抽象的なクラスやインタフェースを作ることができます.自動車の抽象的なクラスは以下の通りです.
public abstract class AbstractCar
{
public abstract void Startup();
public abstract void Run();
public abstract void Stop();
}
現在、テスト対象の自動車であるベンツがあります.次に、具体的なベンツ車種を作成します.
public class BenzCar : AbstractCar
{
public override void Startup()
{
Console.WriteLine(" !");
}
public override void Run()
{
Console.WriteLine(" !");
}
public override void Stop()
{
Console.WriteLine(" !");
}
}
このケースで最も変化しやすいのは、テストされる自動車、すなわち特定の自動車オブジェクトを作成することです.そのため、自動車の作成を抽象化し、抽象的な自動車工場クラスを作成する必要があります.
public abstract class AbstractFactory
{
public abstract AbstractCar CreateInstance();
}
自動車がベンツ自動車であることをテストすると、この抽象的な工場クラスの作成を実現し、具体的なベンツ自動車の作成クラスを作成することができます.
public class BenzFactory : AbstractFactory
{
public override AbstractCar CreateInstance()
{
return new BenzCar();
}
}
クライアント・プログラムでは、テストする必要がある自動車の工場クラスをインスタンス化するだけです.
class Program
{
static void Main(string[] args)
{
AbstractFactory benzFactory = new BenzFactory();
AbstractCar benz = benzFactory.CreateInstance();
benz.Startup();
benz.Run();
benz.Stop();
}
}
ベンツのテストが完了したら、私たちはビアディの車をテストし続けます.私たちはビアディの車クラスを実現し、ビアディの工場クラスを実現する必要があります.クライアントプログラムでは、作成した工場を変更する必要があります.このとき、テストされた車作成工場をプロファイルに書き込む必要がある場合、では、クライアント・プログラムは変更する必要もありません.確かに、これはオブジェクト開発における「高クラスタリング低結合」の考え方に完全に達しています.これは、プロジェクト開発で設計モデルを使用する必要がある目的です.
工場方法モデルのまとめ:
次編では、実際のプロジェクト開発における工場方法モデルの具体的な応用について詳しく説明します.