Abstract Factory抽象工厂模式属于创建型设计模式,用于提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
Design Pattern:Abstract Factory 🔗
基本介绍 🔗
构成 🔗
- AbstractFactory:抽象工厂,用于创建抽象产品的接口。
- ConcreteFactory:实际工厂,实现 AbstractFactory 接口以创建具体产品的类。
- AbstractProduct:抽象产品,声明一种产品对象的接口。
- ConcreteProduct:实际产品,实现 AbstractProduct 接口以创建产品的类。
- Client:客户,持有AbstractFactory 和 AbstractProduct 接口创建一系列相关对象的类。
优点 🔗
- 将系列产品的创建工作延迟到具体工厂的子类中,Client代码和具体产品类的代码分离,降低耦合度。
- 促进了产品的一致性,简化了产品之间的交换。
缺点 🔗
- 由于使系列产品保持一致性,导致了加入新系列产品的难度增加
实例 🔗
C#中抽象工厂模式的实例,我们生活的大陆上每天都在发生着流血惨案,食草动物不停的被食肉动物吞噬。
- AbstractFactory
//地球大陆
public abstract class LandFactory
{
public abstract Herbivore CreateHerbivore();//食草动物
public abstract Carnivore CreateCarnivore();//食肉动物
}
- ConcreteFactory
//欧洲大陆
class EuropeFactory : LandFactory
{
public override Herbivore CreateHerbivore()
{
return new Antelope();
}
public override Carnivore CreateCarnivore()
{
return new Lion();
}
}
//非洲大陆
class AmericaFactory : LandFactory
{
public override Herbivore CreateHerbivore()
{
return new Squirrel();
}
public override Carnivore CreateCarnivore()
{
return new Wolf();
}
}
- AbstractProduct
//食草动物基类
abstract class Herbivore
{
}
//食肉动物基类
abstract class Carnivore
{
public abstract void Eat(Herbivore h);
}
- Product
//羚羊
class Antelope : Herbivore
{
}
//狮子
class Lion : Carnivore
{
public override void Eat(Herbivore h)
{
Console.WriteLine(this.GetType().Name + " -> " + h.GetType().Name);
}
}
//松鼠
class Squirrel : Herbivore
{
}
//狼
class Wolf : Carnivore
{
public override void Eat(Herbivore h)
{
Console.WriteLine(this.GetType().Name + " -> " + h.GetType().Name);
}
}
- Client
class World
{
private Herbivore _herbivore;
private Carnivore _carnivore;
public AnimalWorld(ContinentFactory factory)
{
_carnivore = factory.CreateCarnivore();
_herbivore = factory.CreateHerbivore();
}
public void RunFoodChain()
{
_carnivore.Eat(_herbivore);
}
}
实际运行:
LandFactory europe = new EuropeFactory();
World world = new World(europe);
world.RunFoodChain();
LandFactory america = new AmericaFactory();
world = new World(america);
world.RunFoodChain();
输出:
Lion -> Antelope
Wolf -> Squirrel
结论 🔗
搬砖愉快!