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

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

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

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

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

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

类图: 

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

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

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

        一、抽象产品(Product):

 

  1. //抽象产品(Product) 
  2. abstract class Apple 
  3.     public abstract void Run(); 

        二、具体产品(Concrete Product):

 

  1. //具体产品(Concrete Product) 
  2. class Iphone : Apple 
  3.     public override void Run() 
  4.     { 
  5.         Console.WriteLine("iphone 4 开始运行!"); 
  6.     } 
  7.  
  8. //具体产品(Concrete Product) 
  9. class Ipad : Apple 
  10.     public override void Run() 
  11.     { 
  12.         Console.WriteLine("ipad 2 开始运行!"); 
  13.     } 
  14.  
  15. //具体产品(Concrete Product) 
  16. class IpodNano : Apple 
  17.     public override void Run() 
  18.     { 
  19.         Console.WriteLine("ipod Nano 6 开始运行!"); 
  20.     } 

        三、工厂(Creator):

 

  1. //工厂(Creator) 
  2. class AppleFactory 
  3.     public Apple CreateApple(string productName) 
  4.     { 
  5.         switch (productName.ToUpper()) 
  6.         {  
  7.             case "IPHONE"
  8.                 return new Iphone(); 
  9.             case "IPAD"
  10.                 return new Ipad(); 
  11.             case "IPODNANO"
  12.                 return new IpodNano(); 
  13.             default
  14.                 return null
  15.         } 
  16.     } 

        四、客户端(Client):

 

  1. //客户端(Client) 
  2. class Program 
  3.     static void Main(string[] args) 
  4.     { 
  5.         AppleFactory factory = new AppleFactory(); 
  6.         Apple iphone= factory.CreateApple("iphone"); 
  7.         iphone.Run(); 
  8.         Apple ipad = factory.CreateApple("ipad"); 
  9.         ipad.Run(); 
  10.         Apple ipodnano = factory.CreateApple("ipodnano"); 
  11.         ipodnano.Run(); 
  12.         Console.ReadLine(); 
  13.     } 

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