您的位置:首页 > 其它

工厂方法模式(Factory Method Pattern)

2012-04-07 10:22 155 查看
一、工厂方法模式简介

   简单工厂是返回几个可能类中的一个实例,在我们讲解简单工厂的时候,人的类别太确定了,只有男人和女人。那么大家有没有想过这样一种情况,当类别非常多的时候,比如说,JH写了一个简单工厂(生产动物)的实例,现在JH写了两个动物类,狗和猫,由于需求,现在必需生产一个兔子类,那我们是不是要写个兔子类,然后在修改决策类的代码,如果创建兔子,则返回兔子类。但如果下一次又由于需求变更,又要生产老鼠类,那我们是不是要写个老鼠类,然后又修改决策类的代码。过一段时间,又要生产鱼,虾。。。。

  从上面描述可以看出,我们上述实例其实不仅每次浪费心力去修改决策类的代码,而且还破坏了设计模式的基本原则(开放封闭原则),然而如何让解决这一问题:创建的类是"易变"的,随之而来的就是本章的重点,工厂方法。

  工厂方法定义了一个用户创建对象的接口,本身不决定创建哪一个对象,让子类决定实例化哪一个对象。Factory Method使一个类的实例化延迟到其子类。

二、解决问题

  由于需求的变化,对象的具体实现经常面临着剧烈的变化,如何应对这种变化?提供一种封装机制来隔离出“这个易变对象”的变化,从而保持系统中“其它依赖该对象的对象”不随着需求的改变而改变

三、UML图

View Code

/// 抽象工厂
/// </summary>
public abstract  class AbstractAnimalFactory
{
public abstract AbstractAnimal CreateAnimal();
}
/// <summary>
/// 创建狗工厂
/// </summary>
public class DogFactory:AbstractAnimalFactory
{
public override AbstractAnimal CreateAnimal()
{
return new Dog();
}
}
/// <summary>
/// 创建猫工厂
/// </summary>
public class CatFactory : AbstractAnimalFactory
{
public override AbstractAnimal CreateAnimal()
{
return new Cat();
}
}


//Program

class Program
{
static void Main(string[] args)
{
AbstractAnimalFactory af = new DogFactory();
AbstractAnimal aa = af.CreateAnimal();
Console.WriteLine(aa.GetName());

af = new CatFactory();
aa = af.CreateAnimal();
Console.WriteLine(aa.GetName());

Console.Read();

}
}


//运行结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: