📄 abstractfactoryrealworld.cs
字号:
using System;
using System.Text;
using System.Windows.Forms;
//抽象工厂(AbstractFactory)
//意图
// 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
//适用性
// 1.一个系统要独立于它的产品的创建、组合和表示时。
// 2.一个系统要由多个产品系列中的一个来配置时。
// 3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。
// 4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。
//
//
//特点(C++)
// 1.只提供了一个创建接口,其返回值为具体产品:如 AbstractProduct *Client::CreateProduct(AbstractFactory &factory);
// 2.接口的参数是一个工厂对象(AbstractFactory &factory)的引用,参数类型(AbstractFactory)为抽象基类,调用时根据需要传入具体工厂对象即可;
// 3.接口内部实现了一系列相关或相互依赖对象(抽象产品)的创建:当传入具体工厂时,接口实现的就是一系列具体产品的创建;
// 4.创建的产品立即返回(CreateProduct)。
//参与者
// AbstractFactory — 声明一个创建抽象产品对象的操作接口。
// ConcreteFactory — 实现创建具体产品对象的操作。
// AbstractProduct — 为一类产品对象声明一个接口。
// ConcreteProduct — 定义一个将被相应的具体工厂创建的产品对象,实现AbstractProduct接口。
// Client — 仅使用由AbstractFactory和AbstractProduct类声明的接口。
namespace DesignPattern.AbstractFactoryRealWorld
{
class AbstractFactoryRealWorld : AbstractPattern
{
public static void Run(TextBox tbInfo)
{
s_tbInfo = tbInfo;
s_tbInfo.Text = "";
// Create and run the Africa animal world
ContinentFactory africa = new AfricaFactory();
AnimalWorld world = new AnimalWorld(africa);
world.RunFoodChain();
// Create and run the America animal world
ContinentFactory america = new AmericaFactory();
world = new AnimalWorld(america);
world.RunFoodChain();
// Wait for user input
////Console.Read();
}
}
// "AbstractFactory"
abstract class ContinentFactory
{
public abstract Herbivore CreateHerbivore();//草食动物
public abstract Carnivore CreateCarnivore();//肉食动物
}
// "ConcreteFactory1"
class AfricaFactory : ContinentFactory
{
public override Herbivore CreateHerbivore()
{
return new Wildebeest(); //羚羊
}
public override Carnivore CreateCarnivore()
{
return new Lion(); //狮子
}
}
// "ConcreteFactory2"
class AmericaFactory : ContinentFactory
{
public override Herbivore CreateHerbivore()
{
return new Bison(); //野牛
}
public override Carnivore CreateCarnivore()
{
return new Wolf(); //狼
}
}
// "AbstractProductA"
abstract class Herbivore
{
}
// "AbstractProductB"
abstract class Carnivore
{
public abstract void Eat(Herbivore h);
}
// "ProductA1"
class Wildebeest : Herbivore
{
}
// "ProductB1"
class Lion : Carnivore
{
public override void Eat(Herbivore h)
{
// Eat Wildebeest
DesignPattern.FormMain.OutputInfo(this.GetType().Name + " eats " + h.GetType().Name);
}
}
// "ProductA2"
class Bison : Herbivore
{
}
// "ProductB2"
class Wolf : Carnivore
{
public override void Eat(Herbivore h)
{
// Eat Bison
DesignPattern.FormMain.OutputInfo(this.GetType().Name + " eats " + h.GetType().Name);
}
}
// "Client"
class AnimalWorld
{
private Herbivore herbivore;
private Carnivore carnivore;
// Constructor
public AnimalWorld(ContinentFactory factory)
{
carnivore = factory.CreateCarnivore();
herbivore = factory.CreateHerbivore();
}
public void RunFoodChain()
{
carnivore.Eat(herbivore);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -