C# 工厂模式的随笔
工厂模式包含三种,简单工厂模式,工厂方法模式,抽象工厂模式。这三种都是解决了一个问题,那就是对象的创建问题。他们的职责就是将对象的创建和对象的使用分离开来。
一、简单工厂模式
简单工厂模式主要用在对单一产品且业务逻辑较为简单的情况中。它主要有三种角色组成:
工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑,根据逻辑不同,产生具体的工厂产品。
抽象产品角色:它一般是具体产品继承的父类或者实现的接口。由接口或者抽象类来实现。
具体产品角色:工厂类所创建的对象就是此角色的实例。
做一个简单工厂模式的实例,如图:
1 /// <summary> 2 /// 抽象产品 3 /// </summary> 4 public interface IApler 5 { 6 void GetApler(); 7 } 8 /// <summary> 9 /// 具体产品 10 /// </summary> 11 public class RedApler : IApler 12 { 13 public void GetApler() 14 { 15 Console.WriteLine("这是个红苹果"); 16 } 17 } 18 /// <summary> 19 /// 具体产品 20 /// </summary> 21 public class BlueApler : IApler 22 { 23 public void GetApler() 24 { 25 Console.WriteLine("这是个青苹果"); 26 } 27 } 28 /// <summary> 29 /// 使用枚举 30 /// </summary> 31 public enum CreateType 32 { 33 RedApler = 0, 34 BlueApler = 1 35 } 36 /// <summary> 37 /// 简单工厂 38 /// </summary> 39 public class Factory 40 { 41 public IApler GetApler(CreateType createType) 42 { 43 switch (createType) 44 { 45 case CreateType.RedApler: 46 return new RedApler(); 47 case CreateType.BlueApler: 48 return new BlueApler(); 49 default: 50 throw new Exception(""); 51 } 52 } 53 }
通过对抽象产品类中的方法的实现,创建两种不同的实现产品,再通过简单工厂去实现对不同产品的实现;但是简单工厂只能对单一类型产品实现,所以使用枚举进行类型的替换;
二、工厂模式
工厂模式又被称为多态性工厂模式。在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做。该核心类成为一个抽象工厂角色,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
以下通过一段代码演示:
/// <summary>
/// 抽象工厂
/// </summary>
public interface IFactory
{
IApler CreateApler();
}
/// <summary>
/// 抽象产品
/// </summary>
public interface IApler
{
void GetApler();
}
/// <summary>
/// 具体产品
/// </summary>
public class RedApler : IApler
{
public void GetApler()
{
Console.WriteLine("这是个红苹果");
}
}
public class BlueApler : IApler
{
public void GetApler()
{
Console.WriteLine("这是个青苹果");
}
}
/// <summary>
/// 具体工厂
/// </summary>
public class RedAplerFactory : IFactory
{
public IApler CreateApler()
{
return new RedApler();
}
}
public class BlueAplerFactory : IFactory
{
public IApler CreateApler()
{
return new BlueApler();
}
}
从以上可以看出,工厂模式其实就是简单工厂的一种扩展,实现了可以对多个产品的生产。屏蔽产品类。产品类的实现如何变化,调用者都不需要关心,只需关心产品的接口,只要接口保持不变,系统中的上层模块就不会发生变化。
三、抽象工厂
抽象工厂模式更是工厂模式的一种延深,不仅可以实现对多个抽象对象的实现,主要用来对多个产品族中对象的创建。为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。

抽象工厂的优点/缺点:
- 优点:
- 抽象工厂模式隔离了具体类的生产,使得客户并不需要知道什么被创建。
- 当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
- 增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”。
- 缺点:增加新的产品等级结构很复杂,需要修改抽象工厂和所有的具体工厂类,对“开闭原则”的支持呈现倾斜性。
引用文献:http://www.cnblogs.com/toutou/ 作 者:请叫我头头哥

浙公网安备 33010602011771号