您的位置:首页 > 其它

《设计模式》学习笔记(2)——工厂方法模式(Factory Method)

2005-03-17 12:14 323 查看
1、意图
定义一个用于创建对象的接口,让子类来决定实例化哪一个类。

2、别名
虚构造器。

3、适用性
在以下情况下使用此模式:
• 当一个类不知道它所必须创建的对象的类的时候。
• 当一个类希望由它的子类来指定它所创建的对象的时候。
• 当类将创建对象的职责委托给多个帮助子类中的某一个,且你希望将哪一个帮助子类是代理者这一信息局部化的时候。

4、结构图示及注释

using System;

public abstract class Character

public class Warrior : Character

public class Mage : Character

public abstract class CharacterFactory

public class WarriorFactory : CharacterFactory

public class MageFactory : CharacterFactory

public class Tester
public static void Main()
WarriorFactory warFactory = new WarriorFactory();
MageFactory mageFactory = new MageFactory();

Character myWarrior = warFactory.CreateCharacter();
Character myMage = mageFactory.CreateCharacter();

Console.WriteLine("-------------------------------------------------------");
Console.WriteLine("This is the warrior working:");
myWarrior.Run();
myWarrior.UseSkill();

Console.WriteLine();

Console.WriteLine("-------------------------------------------------------");
Console.WriteLine("This is the mage working:");
myMage.Run();
myMage.UseSkill();
}
}

6、关于工厂方法模式和简单工厂模式
简单工厂(Simple Factory)可以看作是参数化的工厂方法。由于简单工厂模式比较简单,就不再赘述了。
PS:说一点曾经我关于简单工厂和工厂方法的一个疑惑:由于最初是先看简单工厂,因此看工厂方法的时候觉得格外麻烦,总觉得工厂方法的做法是多此一举。直到参考了吕震宇的文章后才对为什么使用工厂方法模式有了一些了解。当然,上面的代码例子完全可以使用简单工厂来做,但是扩展性就受到了限制。比如我们现在需要新添加一个职业,那么就不得不去修改角色工厂;而使用工厂方法模式则只需新加一个角色类的子类以及角色工厂的子类即可。

由于初学,一些观点可能并不是很正确,欢迎各路高手指教。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: