极速理解设计模式系列:21.简单工厂模式(Simple Factory Pattern)

四个角色:抽象产品(Product)、具体产品(Concrete Product)、工厂(Creator)、客户端(Client) 

        抽象产品(Product):需要创建的各种产品的父类。这类产品有共同的接口。

        具体产品(Concrete Product):需要创建的具体对象。

        工厂(Creator):内部逻辑可以控制生成目标对象。

        客户端(Client):实例化工厂,然后工厂根据传入参数得到各种产品。调用产品实现不同功能。

 实现思路:首先将工厂实例化,然后使用工厂创建产品赋值给抽象产品的引用,然后通过抽象产品的公共接口调用具体产品的方法以实现功能。

类图: 

极速理解设计模式系列:21.简单工厂模式(Simple Factory Pattern)

应用场景:苹果公司的工厂生产iphone 4、ipad 2、ipod nano 6。

分析:这里多种产品都可以运行,所以有一个公共方法,然后抽象为父类。

        下面我们在控制台程序去演示一下如何使用Simple Factory Pattern:

        一、抽象产品(Product):

    //抽象产品(Product)
abstract class Apple
{
public abstract void Run();
}

        二、具体产品(Concrete Product):

极速理解设计模式系列:21.简单工厂模式(Simple Factory Pattern)
    //具体产品(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 开始运行!");
}
}
极速理解设计模式系列:21.简单工厂模式(Simple Factory Pattern)

        三、工厂(Creator):

极速理解设计模式系列:21.简单工厂模式(Simple Factory Pattern)
    //工厂(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;
}
}
}
极速理解设计模式系列:21.简单工厂模式(Simple Factory Pattern)

        四、客户端(Client):

极速理解设计模式系列:21.简单工厂模式(Simple Factory Pattern)
    //客户端(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();
}
}
极速理解设计模式系列:21.简单工厂模式(Simple Factory Pattern)

       如需源码请点击 SimpleFactoryPattern.rar 下载。



本文转自程兴亮博客园博客,原文链接http://www.cnblogs.com/chengxingliang/archive/2011/12/12/2283466.html:,如需转载请自行联系原作者

上一篇:PHP+新浪微博开放平台+新浪云平台(SAE)开发微博应用——进一步学习的走向和有用的资源


下一篇:设计模式——简单工厂模式