Abstract Factory Pattern(抽象工厂模式)——《深入浅出设计模式(C#/Java版)》
2009-09-25 14:47
549 查看
来源:《深入浅出设计模式(C#/Java版)》 莫勇腾 编著
哎,似乎越看越觉得糊涂了,先积累吧
定义:
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂(Abstract Factory)模式又称为Kit模式,属于对象创建型模式。
C#实例——大陆生态系统
输出:
AnimalWorld.Lion eats AnimalWorld.Wildebeest
AnimalWorld.Wolf eats AnimalWorld.Bison
主要优点:
隔离了具体类的生成,使得客户不需要知道什么被创建了。
主要缺点:
在添加新的产品对象时,难以扩展抽象工厂以便生产新种类的产品。
应用情景:
(1) 系统需要屏蔽有关对象如何创建、如何组织和如何表示。
(2) 系统需要由关联的多个对象来构成。
(3) 有关联的多个对象需要一起应用并且它们的约束是强迫的(不可分离)。
(4) 你想提供一组对象而不显示它们的实现过程,只显示它们的接口。
哎,似乎越看越觉得糊涂了,先积累吧
定义:
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂(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); } } /// <summary> /// 抽象工厂模式客户应用测试 /// </summary> 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) 你想提供一组对象而不显示它们的实现过程,只显示它们的接口。
相关文章推荐
- 极速理解设计模式系列:10.抽象工厂模式(Abstract Factory Pattern)
- 抽象工厂模式(Abstract Factory Pattern) 转
- Java Abstract Factory Pattern(抽象工厂模式)
- Factory Method Pattern(工厂方法模式)——《深入浅出设计模式(C#/Java版)》
- AbstractFactory Pattern(抽象工厂模式)
- Net设计模式之抽象工厂模式(Abstract Factory Pattern)
- 设计模式--抽象工厂模式【 Abstract Factory Pattern】
- 我所理解的设计模式(C++实现)——抽象工厂模式(Abstract Factory Pattern)
- 抽象工厂模式(Abstract Factory Pattern)
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
- 创建型模式——抽象工厂模式(Abstract Factory Pattern)
- 解读设计模式----抽象工厂模式(AbstractFactory Pattern)
- 设计模式------抽象工厂模式(AbstractFactoryPattern)
- Python实现设计模式--03.抽象工厂模式(Abstract Factory Pattern)
- 设计模式学习笔记--抽象工厂模式(Abstract Factory Pattern)【创建型模式】
- 设计模式之八S:抽象工厂模式(Abstract Factory Pattern)
- 抽象工厂模式(Abstract Factory Pattern)实现以及示例demo
- 小谈抽象工厂模式与工厂方法,Abstract Factory Pattern and Factory Method
- c++设计模式:抽象工厂模式(Abstract Factory Pattern)
- 抽象工厂模式(Abstract Factory Pattern)