1. シンプル ファクトリ パターン
シンプル ファクトリ パターンは、提供されたデータに基づいて、いくつかの可能なクラスの 1 つのインスタンスを返します。通常、返されるクラスには共通の親クラスとパブリック メソッドがあります。
Simple Factory パターンは、実際には GoF の 23 のデザイン パターンの 1 つではありません。
2. シンプルなファクトリ パターンの役割と構造:
ファクトリ クラスの役割 Creator (LightSimpleFactory): ファクトリ クラスは、クライアント (Create メソッド) の直接制御下で製品オブジェクトを作成します。
抽象的な製品の役割 製品 (ライト): 単純なファクトリによって作成されたオブジェクトの親クラス、またはそれらが共有するインターフェイスを定義します。クラス、抽象クラス、またはインターフェイスを指定できます。
コンクリート製品の役割 ConcreteProduct (BulbLight、TubeLight): 工場によって処理される特定のオブジェクトを定義します。
3. プログラム例:
using System; public abstract class Light { public abstract void TurnOn(); public abstract void TurnOff(); } public class BulbLight : Light { public override void TurnOn() { Console.WriteLine("Bulb Light is Turned on"); } public override void TurnOff() { Console.WriteLine("Bulb Light is Turned off"); } } public class TubeLight : Light { public override void TurnOn() { Console.WriteLine("Tube Light is Turned on"); } public override void TurnOff() { Console.WriteLine("Tube Light is Turned off"); } } public class LightSimpleFactory { public Light Create(string LightType) { if(LightType == "Bulb") return new BulbLight(); else if(LightType == "Tube") return new TubeLight(); else return null; } } public class Client { public static void Main() { LightSimpleFactory lsf = new LightSimpleFactory(); Light l = lsf.Create("Bulb"); l.TurnOn(); l.TurnOff(); Console.WriteLine("-----------------"); l = lsf.Create("Tube"); l.TurnOn(); l.TurnOff(); } }
5. 利点と欠点:
利点:
どの製品クラスのインスタンスをいつ作成するかを決定できる必要な判断ロジックが含まれており、クライアントは直接の責任を免除されます。製品オブジェクトを作成しますが、製品を「消費」するだけです。シンプルなファクトリー パターンは、このアプローチを通じて責任の分離を実現します。
短所:
プロダクトが複雑な多層の階層構造を持つ場合、ファクトリクラスは自分自身だけを持ち、同じように変更に適応できます。これがモデルの欠点です。ファクトリ クラスはすべての製品作成ロジックを一元化しているため、正常に動作しなくなるとシステム全体に影響が及びます。
同時に、新しい製品を追加すると、工場のロジックを変更する必要があり、システムの拡張が難しくなり、工場のロジックが複雑になりすぎる可能性があります。
さらに、単純なファクトリ パターンは通常、静的なファクトリ メソッドを使用するため、サブクラスへの継承が不可能になり、ファクトリ ロールが継承に基づいた階層構造を形成できなくなります。
以上がC#ファクトリパターンの簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。