四个角色:抽象产品(Product)、具体产品(Concrete Product)、工厂(Creator)、客户端(Client)
抽象产品(Product):需要创建的各种产品的父类。这类产品有共同的接口。
具体产品(Concrete Product):需要创建的具体对象。
工厂(Creator):内部逻辑可以控制生成目标对象。
客户端(Client):实例化工厂,然后工厂根据传入参数得到各种产品。调用产品实现不同功能。
实现思路:首先将工厂实例化,然后使用工厂创建产品赋值给抽象产品的引用,然后通过抽象产品的公共接口调用具体产品的方法以实现功能。
类图:
应用场景:苹果公司的工厂生产iphone 4、ipad 2、ipod nano 6。
分析:这里多种产品都可以运行,所以有一个公共方法,然后抽象为父类。
下面我们在控制台程序去演示一下如何使用Simple Factory Pattern:
一、抽象产品(Product):
//抽象产品(Product)
abstract class Apple
{
public abstract void Run();
}
二、具体产品(Concrete Product):
//具体产品(Concrete Product)
class Iphone : Apple
{
public override void Run()
{
Console.WriteLine("iphone 4 开始运行!");
}
}
//具体产品(Concrete Product)
class Ipad : Apple
{
public override void Run()
{
Console.WriteLine("ipad 2 开始运行!");
}
}
//具体产品(Concrete Product)
class IpodNano : Apple
{
public override void Run()
{
Console.WriteLine("ipod Nano 6 开始运行!");
}
}
三、工厂(Creator):
//工厂(Creator)
class AppleFactory
{
public Apple CreateApple(string productName)
{
switch (productName.ToUpper())
{
case "IPHONE":
return new Iphone();
case "IPAD":
return new Ipad();
case "IPODNANO":
return new IpodNano();
default:
return null;
}
}
}
四、客户端(Client):
//客户端(Client)
class Program
{
static void Main(string[] args)
{
AppleFactory factory = new AppleFactory();
Apple iphone= factory.CreateApple("iphone");
iphone.Run();
Apple ipad = factory.CreateApple("ipad");
ipad.Run();
Apple ipodnano = factory.CreateApple("ipodnano");
ipodnano.Run();
Console.ReadLine();
}
}
如需源码请点击 SimpleFactoryPattern.rar 下载。