抽象工厂(Abstract Factory)模式
using System;
abstract class AbstractFactory //抽象工厂(Abstract Factory)角色 { public abstract AbstractProductA CreateProductA(); public abstract AbstractProductB CreateProductB(); } class ConcreteFactory1 : AbstractFactory //具体工厂(Concrete Factory)角色1 { public override AbstractProductA CreateProductA() { return new ProductA1(); } public override AbstractProductB CreateProductB() { return new ProductB1(); } } class ConcreteFactory2 : AbstractFactory //具体工厂(Concrete Factory)角色2 { public override AbstractProductA CreateProductA() { return new ProductA2(); } public override AbstractProductB CreateProductB() { return new ProductB2(); } } abstract class AbstractProductA //抽象产品(Abstract Product)角色 { } abstract class AbstractProductB { public abstract void Interact(AbstractProductA a); } class ProductA1 : AbstractProductA //具体产品(Concrete Product)角色a { } class ProductB1 : AbstractProductB //具体产品(Concrete Product)角色b { public override void Interact(AbstractProductA a) { Console.WriteLine(this + " interacts with " + a); } } class ProductA2 : AbstractProductA { } class ProductB2 : AbstractProductB { public override void Interact(AbstractProductA a) { Console.WriteLine(this + " interacts with " + a); } } class Environment //环境 { private AbstractProductA abstractProductA; private AbstractProductB abstractProductB; public Environment(AbstractFactory factory) { abstractProductA = factory.CreateProductA(); abstractProductB = factory.CreateProductB(); } public void Run() { abstractProductB.Interact(abstractProductA); } } class ClientApp { static void Main() { AbstractFactory factory1 = new ConcreteFactory1(); Environment e1 = new Environment(factory1); e1.Run(); AbstractFactory factory2 = new ConcreteFactory2(); Environment e2 = new Environment(factory2); e2.Run(); } } |
using System;
abstract class ContinentFactory
{
public abstract Herbivore CreateHerbivore(); //草食动物
public abstract Carnivore CreateCarnivore(); //肉食动物
}
class AfricaFactory : ContinentFactory
{
public override Herbivore CreateHerbivore()
{
return new Wildebeest(); //羚羊
}
public override Carnivore CreateCarnivore()
{
return new Lion(); //狮子
}
}
class AmericaFactory : ContinentFactory
{
public override Herbivore CreateHerbivore()
{
return new Bison(); //野牛
}
public override Carnivore CreateCarnivore()
{
return new Wolf(); //狼
}
}
abstract class Herbivore
{ }
abstract class Carnivore
{
public abstract void Eat(Herbivore h);
}
class Wildebeest : Herbivore
{ }
class Lion : Carnivore
{
public override void Eat(Herbivore h)
{
Console.WriteLine(this + " eats " + h);
}
}
class Bison : Herbivore
{ }
class Wolf : Carnivore
{
public override void Eat(Herbivore h)
{
Console.WriteLine(this + " eats " + h);
}
}
class AnimalWorld //动物世界
{
private Herbivore herbivore;
private Carnivore carnivore;
public AnimalWorld(ContinentFactory factory)
{
carnivore = factory.CreateCarnivore();
herbivore = factory.CreateHerbivore();
}
public void RunFoodChain()
{
carnivore.Eat(herbivore);
}
}
class GameApp
{
public static void Main(string[] args)
{
ContinentFactory africa = new AfricaFactory();
AnimalWorld world = new AnimalWorld(africa);
world.RunFoodChain();
ContinentFactory america = new AmericaFactory();
world = new AnimalWorld(america);
world.RunFoodChain();
}
}