工厂方法模式

一、工厂方法模式简介

工厂方法(Factory Method):工厂方法模式,定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。

二、工厂方法的角色结构

抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。

具体工厂(Concrete Creator)角色:这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。

工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。

在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做。这个核心类仅仅负责给出具体工厂必须实现的接口,而不接触哪一个产品类被实例化这种细节。

这使得工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。在Factory Method模式中,工厂类与产品类往往具有平行的等级结构,它们之间一一对应。

三、简单工厂与工厂方法的区别

简单工厂最大的优点在于简单工厂包含必要的逻辑判断,根据客户端的条件动态的实例化相关的类,对于客户端来说,去除了具体产品的依赖。

工程方法模式(Factory Mode)定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延长到其子类。

四、工厂方法模式结构图

 

Product抽象类,定义工厂方法所创建的对象接口。

ConcreteProduct实现类,具体的产品,实现Product接口。

Factory抽象类声明工厂方法,该方法返回一个Product类型的对象。

ConcreteFactory,抽象工厂类Factory的具体实现,返回一个ConcreteProduct实例

示例:

1.定义一个学习雷锋的方法:

1 using System;
2  using System.Collections.Generic;
3  using System.Linq;
4  using System.Web;
5
6  namespace FactoryMode.XueLeiFengFactory
7 {
8 public class LeiFeng
9 {
10 public string Sweep()
11 {
12 return "Sweep";
13 }
14 public string Wash()
15 {
16 return "Wash";
17 }
18 public string BuyRice()
19 {
20 return "BuyRice";
21 }
22 }
23 }

2.定义一个工厂接口

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace FactoryMode.XueLeiFengFactory
{
public interface ILeiFengFactory
{
LeiFeng CreateLeiFeng();
}
}

大学生类继承雷锋接口

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace FactoryMode.XueLeiFengFactory
{
public class UndergraducteFactory:ILeiFengFactory
{
#region ILeiFengFactory 成员

/// <summary>
/// 大学生继承雷锋接口
/// </summary>
/// <returns></returns>
public LeiFeng CreateLeiFeng()
{
return new Undergraduate();
}

#endregion
}
}

社区员继承雷锋类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace FactoryMode.XueLeiFengFactory
{
public class VolunteerFactory:ILeiFengFactory
{
#region ILeiFengFactory 成员

public LeiFeng CreateLeiFeng()
{
return new Voluntter();
}

#endregion
}
}

客户端实现:

namespace FactoryMode.XueLeiFengFactory
{
public partial class FactorFunctionIndex : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
ILeiFengFactory factory
= new UndergraducteFactory();
LeiFeng lei
= factory.CreateLeiFeng();
Response.Write(lei.BuyRice());
}

}
}

实现结果:BuyRice  

五、总结(Summary

http://s.click.taobao.com/t_8?e=7HZ5x%2BOzdswsVvyc5Jts79Au1Q%3D%3D&p=mm_24156262_0_0

本文对工厂方法模式(Factory Method Pattern)的概念及其设计结构图简单地进行了描述,同样也以一个计算器的实例进行了说明,工厂方法模式较简单工厂模式,修改时关闭的,扩展时开放的,完全符合开放-封闭原则.

posted @ 2011-02-15 18:05  向——丁——丁  阅读(381)  评论(0编辑  收藏  举报