前提
前面我们学习到了简单工厂模式,工厂方法模式,简单工厂随着新产品的增加需要增加额外代码,工厂方法模式解决了简单工厂这一缺点,它根据新增加具体的产品类,创建具体工厂类,生产具体产品,实现了很好的扩展性,可见工厂模式中的工厂只能创建某种具体的一种产品,而无法创建一系列的产品,那该如何是好?可见抽象工厂的出现解决了这个问题。
抽象工厂模式介绍
我们假期的时候在学校学习,每到了饭点的时间,我就想吃大棚子子里面的鸡肉,我发愁啊发愁,我是去吃吉吉向上呢,还是吃脆皮鸡盖饭呢?吉吉向上我吃沙拉味道的鸡肉呢,还是吃黑胡椒味道的呢,脆皮鸡我是吃沙拉味道的呢,还是吃黑胡椒味道的呢?
吉吉向上类 | 沙拉味 | 黑胡椒 |
脆皮鸡类 | 沙拉味 | 黑胡椒 |
可见两种不同的商店,两种不同的做法,一个具体的工厂可以产生不同类型的产品,这些产品构成了产品族。那么这样我们可以享受到四种口味的鸡肉。
class Program
{
static void Main(string[] args)
{
//吉吉向上店两种口味的鸡肉
FoodFactory JJXSFactory = new JiJiFactory();
ShaLa jiji= JJXSFactory.Chicken();
jiji.Print();
Black CP = JJXSFactory.Meat();
CP.Print();
//脆皮鸡店两种口味的鸡肉
FoodFactory CPFactory = new CuiPiChicken();
ShaLa CPSL = CPFactory.Chicken();
jiji.Print();
Black HHJCP = CPFactory.Meat();
CP.Print();
}
}
public abstract class FoodFactory//食物工厂,提供给吉吉向上和脆皮鸡两个工厂两种口味的鸡肉接口
{
public abstract ShaLa Chicken ();//抽象沙拉味鸡肉接口
public abstract Black Meat();//抽象黑胡椒味鸡肉接口
}
//吉吉向上工厂继承食物工厂,并进行方法的重写
public class JiJiFactory : FoodFactory
{
public override ShaLa Chicken()//沙拉味鸡肉进行方法重写
{
return new CuiSLMeat();
}
public override Black Meat()//对黑胡椒鸡肉进行方法重写
{
return new CuiBlackMeat();
}
}
//脆皮鸡工厂继承食物工厂,并进行方法的重写
public class CuiPiChicken : FoodFactory
{
public override ShaLa Chicken()
{
return new CuiSLMeat();
}
public override Black Meat()
{
return new CuiBlackMeat();
}
}
public abstract class Black//黑胡椒味鸡肉抽象类,提供给吉吉向上和脆皮鸡工厂
{
public abstract void Print();//输出信息
}
public abstract class ShaLa//沙拉味鸡肉抽象类,提供给吉吉向上和脆皮鸡工厂
{
public abstract void Print();//输出信息
}
public class JiBlackMeat : Black//吉吉向上店的黑胡椒口味鸡肉
{
public override void Print()
{
Console.WriteLine("黑胡椒味吉吉向上");
}
}
public class CuiBlackMeat : Black//脆皮鸡店的黑胡椒口味的鸡肉
{
public override void Print()
{
Console.WriteLine("黑胡椒味脆皮鸡");
}
}
public class JISLMeat : ShaLa//吉吉向上店沙拉味的鸡肉
{
public override void Print()
{
Console.WriteLine("沙拉味吉吉向上");
}
}
public class CuiSLMeat : ShaLa//脆皮鸡店沙拉味的鸡肉
{
public override void Print()
{
Console.WriteLine("沙拉味脆皮鸡");
}
}
抽象工厂模式结构图
抽象工厂模式解析:
我们可以大致分为四个模块来理解:分别为抽象工厂、具体工厂、抽象产品、具体产品,分清他们的职责即可容易理解
抽象工厂:创建一系列产品,一个产品一个方法
具体工厂:继承抽象工厂,实现产品方法
抽象产品:声明了产品的方法
总结
优点:具体工厂可创建一系列的产品族。
缺点: 每个具体增加产品是一系列的产品,这一系列产品具有等级关系,当再次增加某一种产品时,需要对原有的系统进行大规模修改。违背了开闭原则。
适用场景: 同一个产品系的产品一起使用,产品等级结构稳定,设计完成之后,不可独立增加具体产品。
关于创建模型模型中的三大工厂模式就先学习到这里,他们有各自的优缺点,简单工厂模式——工厂模式模式——抽象工厂模式,根据前者的不足,后者弥补其缺点,层层递进。目前小编学习理解尚浅,希望路过的小哥哥小姐姐多多指点。