抽象工厂模式是对工厂模式的进一步抽象,是工厂模式中最为抽象和最具一般性的一种形态,提供了创建一系列相关或者相互依赖对象的接口,而无需指定他们的类型。
如果你对工厂模式还有些迷惑的,可以回顾下工厂模式的内容:工厂模式之二——工厂模式【弥补简单工厂模式弊端】
下面直接引用园中某位博友运用的实例进行讲解:
生活场景:某家具厂为学校生产课桌和座椅,开始只生产木质的课桌和座椅,后来经学校要求,又开始为学校生产铁质的课桌和座椅。
设计目标:实现针对多种成套产品的生产,每套产品有多种不同等级结构的物品组成。
【分析】
抽象产品:虚拟课桌 虚拟椅子
具体产品:木课桌 铁课桌;木椅子 铁椅子
抽象工厂:要生产产品的基类:抽象产品
具体工厂:木工厂=》木桌子,木椅子 铁工厂=》铁桌子,铁椅子
设计目标:实现针对多种成套产品的生产,每套产品有多种不同等级结构的物品组成。
【分析】
抽象产品:虚拟课桌 虚拟椅子
具体产品:木课桌 铁课桌;木椅子 铁椅子
抽象工厂:要生产产品的基类:抽象产品
具体工厂:木工厂=》木桌子,木椅子 铁工厂=》铁桌子,铁椅子
======================================代码片段讲解=========================================
角色分析好了就直接进入代码部分:
抽象工厂类:
1 // 抽象工厂:生产课桌 生产椅子2 public abstract class Factory
3 {
4 public abstract Desk CreateDesk();
5 public abstract Chair CreateChair();
6 }
该类中定义了两个抽象方法,一个用来生产桌子,一个用来成产椅子
具体工厂类:
具体工厂 1 //具体工厂(木质产品工厂)public class WoodFactory : Factory
{
//木桌子
public override Desk CreateDesk()
{
return new WoodDesk();
}
//木椅子
public override Chair CreateChair()
{
return new WoodChair();
}
}
//具体工厂(铁质产品工厂)
public class IronFactory : Factory
{
//铁桌子
public override Desk CreateDesk()
{
return new IronDesk();
}
//铁椅子
public override Chair CreateChair()
{
return new IronChair();
}
}
抽象工厂是用来生产一系列相关产品,这里的桌子分木桌子和铁桌子,这两种桌子就是相关产品,同理,木椅子和铁椅子也是相关产品,所以具体工厂分为了木制工厂和铁制工厂,分别用来生产木质产品和铁质产品,所以这里工厂重写了抽象工厂中的抽象方法,分别创建了某种材质的实例。
抽象产品类:
抽象产品 1 //抽象产品A:课桌public abstract class Desk
{
public abstract void ProductDesk();
}
//抽象产品B:椅子
public abstract class Chair
{
public abstract void ProductChair();
}
工厂模式是一个抽象工厂一个抽象产品,抽象工厂模式是多个抽象工厂多个抽象产品。
具体产品类:
具体产品 1 //具体产品A_1:木课桌public class WoodDesk : Desk
{
public override void ProductDesk()
{
Console.WriteLine("Wood Desk.......");
}
}
//具体产品A_2:铁课桌
public class IronDesk : Desk
{
public override void ProductDesk()
{
Console.WriteLine("Iron Desk.......");
}
}
//具体产品B_1:木椅子
public class WoodChair : Chair
{
public override void ProductChair()
{
Console.WriteLine("Wood Chair......");
}
}
//具体产品B_2:铁椅子
public class IronChair : Chair
{
public override void ProductChair()
{
Console.WriteLine("Iron Chair.......");
}
}
具体产品分系列,有铁质系列和木质系列两种,产品分别是桌子椅子。
客户端:
客户端 1 //客户端class Program
{
static void Main(string[] args)
{
//要求木桌子
Desk desk = new WoodFactory().CreateDesk();
desk.ProductDesk();
//要求铁椅子
Chair chair = new IronFactory().CreateChair();
chair.ProductChair();
Console.ReadKey();
}
}