C#の中の抽象的な工場のモードはどんな概念ですかを簡単に理解します!
11448 ワード
抽象ファクトリモードは、クライアントが特定のタイプを指定する必要がなく、複数のプロダクトファミリー内のオブジェクトを作成するように、クライアントにインタフェースを提供します.本文は依然として従来のファーストフード店に続く例を取った.現在、ファーストフード店は常に良好で、次第に発展し、異なる地方の人の食習慣に適応するために、2大シリーズ(製品族に相当)のファーストフード、北方シリーズと南方シリーズを創設した.各シリーズはそれぞれシェフのスプーンで作られています.抽象工場モデルは新しい製品ファミリーに対して開閉原則を支持するが,新しい製品に対して開閉原則を支持しない.たとえば、米国シリーズのファーストフード(製品ファミリーを追加することに相当)を追加するなど、新しい製品ファミリーを追加すると、各製品インタフェースから対応する米国シリーズの製品を継承すれば、既存のコードを変更する必要はありません.しかし、新しい製品を追加すると、例えば「マントー」という製品を追加すると、開閉原則はサポートされません.シェフインタフェースにおいて、「マントー」に戻る方法を追加するため、既存のインタフェースを修正し、上層インタフェースを修正し、このインタフェースを継承する具体的なクラスも変更されます.
抽象ファクトリモードを使用する条件:1つのシステムは、製品がどのように作成され、組み合わせられ、表現されるかの詳細に依存してはならない.2複数の製品ファミリーがあり、システムはそのうちの1つのファミリーの製品3が同じ製品ファミリーに属する製品のみを消費して一緒に使用される.4システムは製品のライブラリを提供し、すべての製品は同じインタフェースで実現されます.
次のC#実装を見てください.
アプリケーションの実装:
実はこのまま!抽象工場は実体工場を生み出し、実体工場は実体製品を生産し、実体製品は抽象製品に属する.最終的にお客様に直接向いているのは抽象工場と抽象製品です.
抽象ファクトリモードを使用する条件:1つのシステムは、製品がどのように作成され、組み合わせられ、表現されるかの詳細に依存してはならない.2複数の製品ファミリーがあり、システムはそのうちの1つのファミリーの製品3が同じ製品ファミリーに属する製品のみを消費して一緒に使用される.4システムは製品のライブラリを提供し、すべての製品は同じインタフェースで実現されます.
次のC#実装を見てください.
/// <summary>
///
/// </summary>
class AbstractFactory
{
//
public interface Chef
{
//
//
Noodle MakeNoodle();
//
Rice MakeRice();
//
Bread MakeBread();
}
// ,
class NorthChef : Chef
{
public Noodle MakeNoodle()
{
Console.WriteLine("
...");
Noodle noodle = new NorthNoodle();
return noodle;
}
public Rice MakeRice()
{
Console.WriteLine("
...");
Rice rice = new NorthRice();
return rice;
}
public Bread MakeBread()
{
Console.WriteLine("
..");
Bread bread = new NorthBread(); return bread;
}
}
// ,
class SouthChef : Chef
{
public Noodle MakeNoodle()
{
Console.WriteLine("
。。。");
Noodle noodle = new SouthNoodle();
return noodle;
}
public Rice MakeRice()
{
Console.WriteLine("
。。。");
Rice rice = new SouthRice();
return rice;
}
public Bread MakeBread()
{
Console.WriteLine("
。。。");
Bread bread = new SouthBread();
return bread;
}
}
//
public interface Noodle
{
//
}
class NorthNoodle : Noodle
{
public NorthNoodle()
{
Console.WriteLine("
");
}
}
class SouthNoodle : Noodle
{
public SouthNoodle()
{
Console.WriteLine("
");
}
}
//
public interface Rice
{
//
}
class NorthRice : Rice
{
public NorthRice()
{
Console.WriteLine("
, ");
}
}
class SouthRice : Rice
{
public SouthRice()
{
Console.WriteLine("
, ");
}
}
//
public interface Bread
{
//
}
class NorthBread : Bread
{
public NorthBread()
{
Console.WriteLine("
");
}
}
class SouthBread : Bread
{
public SouthBread()
{
Console.WriteLine("
");
}
}
}
アプリケーションの実装:
/// <summary>
/// 。
/// </summary>
[STAThread]
static void Main(string[] args)
{
// , ,
// ,
Chef northChef=new NorthChef();
northChef.MakeNoodle();
northChef.MakeRice();
northChef.MakeBread();
Chef southChef=new SouthChef();
southChef.MakeBread();
southChef.MakeNoodle();
southChef.MakeRice();
Console.ReadLine();
}
実はこのまま!抽象工場は実体工場を生み出し、実体工場は実体製品を生産し、実体製品は抽象製品に属する.最終的にお客様に直接向いているのは抽象工場と抽象製品です.