四个角色:抽象产品(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 下载。
本文转自程兴亮 51CTO博客,原文链接:http://blog.51cto.com/chengxingliang/827088