Abstract Factory Pattern(抽象工厂模式)——《深入浅出设计模式(C#/Java版)》

来源:《深入浅出设计模式(C#/Java版)》 莫勇腾 编著

哎,似乎越看越觉得糊涂了,先积累吧

定义

  提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂(Abstract Factory)模式又称为Kit模式,属于对象创建型模式。

C#实例——大陆生态系统

using System; namespace AnimalWorld { //抽象大陆工厂 abstract class ContientFactory { abstract public Herbivore CreateHerbivore();//食草动物 abstract public Carnivore CreateCarnivore();//食肉动物 } //非洲大陆,有角马、狮子 class AfricaFactory : ContientFactory { override public Herbivore CreateHerbivore() { return new Wildebeest();//角马食草 } override public Carnivore CreateCarnivore() { return new Lion();//狮子食肉 } } //美洲大陆,有狼、野牛 class AmericaFactory : ContientFactory { override public Herbivore CreateHerbivore() { return new Bison();//野牛食草 } override public Carnivore CreateCarnivore() { return new Wolf();//狼食肉 } } //食草动物 abstract class Herbivore { } //食肉动物 abstract class Carnivore { //猎食食草动物的方法 abstract public void Eat(Herbivore h); } //角马 class Wildebeest : Herbivore { } //狮子 class Lion : Carnivore { //重写猎食食草动物的方法 override public void Eat(Herbivore h) { Console.WriteLine(this + " eats " + h); } } //野牛 class Bison : Herbivore { } //狼 class Wolf : Carnivore { //重写猎食食草动物的方法 override public void Eat(Herbivore h) { Console.WriteLine(this + " eats " + h); } } //动物世界类 class AnimalWorld { private Herbivore herbivore; private Carnivore carnivore; //创建两种动物分类 public AnimalWorld(ContientFactory factory) { carnivore = factory.CreateCarnivore(); herbivore = factory.CreateHerbivore(); } //运行食物链 public void RunFoodChain() { //食肉动物猎食食草动物 carnivore.Eat(herbivore); } } ///

/// 抽象工厂模式客户应用测试 /// class GameApp { [STAThread] static void Main(string[] args) { //创建并运行非洲动物世界 ContientFactory africa = new AfricaFactory(); AnimalWorld world = new AnimalWorld(africa); world.RunFoodChain(); //创建并运行美洲动物世界 ContientFactory america = new AmericaFactory(); world = new AnimalWorld(america); world.RunFoodChain(); Console.Read(); } } }

输出:

AnimalWorld.Lion eats AnimalWorld.Wildebeest

AnimalWorld.Wolf eats AnimalWorld.Bison

主要优点:

  隔离了具体类的生成,使得客户不需要知道什么被创建了。

主要缺点:

  在添加新的产品对象时,难以扩展抽象工厂以便生产新种类的产品。

应用情景:

(1)       系统需要屏蔽有关对象如何创建、如何组织和如何表示。

(2)       系统需要由关联的多个对象来构成。

(3)       有关联的多个对象需要一起应用并且它们的约束是强迫的(不可分离)。

(4)       你想提供一组对象而不显示它们的实现过程,只显示它们的接口。

 

 

 

 

你可能感兴趣的:(设计模式)