《设计模式》学习笔记(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:说一点曾经我关于简单工厂和工厂方法的一个疑惑:由于最初是先看简单工厂,因此看工厂方法的时候觉得格外麻烦,总觉得工厂方法的做法是多此一举。直到参考了吕震宇的文章后才对为什么使用工厂方法模式有了一些了解。当然,上面的代码例子完全可以使用简单工厂来做,但是扩展性就受到了限制。比如我们现在需要新添加一个职业,那么就不得不去修改角色工厂;而使用工厂方法模式则只需新加一个角色类的子类以及角色工厂的子类即可。
由于初学,一些观点可能并不是很正确,欢迎各路高手指教。
定义一个用于创建对象的接口,让子类来决定实例化哪一个类。
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:说一点曾经我关于简单工厂和工厂方法的一个疑惑:由于最初是先看简单工厂,因此看工厂方法的时候觉得格外麻烦,总觉得工厂方法的做法是多此一举。直到参考了吕震宇的文章后才对为什么使用工厂方法模式有了一些了解。当然,上面的代码例子完全可以使用简单工厂来做,但是扩展性就受到了限制。比如我们现在需要新添加一个职业,那么就不得不去修改角色工厂;而使用工厂方法模式则只需新加一个角色类的子类以及角色工厂的子类即可。
由于初学,一些观点可能并不是很正确,欢迎各路高手指教。
相关文章推荐
- 设计模式(二)工厂方法模式(FactoryMethod)-创建型
- 《Java与模式》学习笔记之二---工厂方法模式(Factory Method)
- 设计模式(2)工厂方法模式(Factory Method)
- 设计模式系列之04-工厂方法模式(Factory Method)
- 设计模式实现(五)--- 工厂方法模式(Factory Method)
- 设计模式(九)[创建模式] 工厂方法模式(Factory Method)
- java设计模式(2):工厂方法模式(Factory Method)
- 设计模式之Factory Method(工厂方法模式)
- 【转载】.NET设计模式之工厂方法模式(Factory Method)
- 设计模式 工厂方法模式(Factory Method)
- 设计模式(3)の创建型の工厂方法模式(Factory Method)の静态工厂方法模式
- 工厂方法模式(Factory Method)
- Java经典设计模式-创建型模式-工厂方法模式(Factory Method)
- 设计模式2:Factory Method Pattern(工厂方法模式)
- 工厂方法模式(Factory Method)
- .NET设计模式:工厂方法模式(Factory Method)BY Terrylee
- .Net设计模式学习笔记(五):工厂方法模式(Factory Method)
- 构造型模式之(Factory Method)工厂方法模式
- IOS设计模式浅析之工厂方法模式(Factory Method)
- 设计模式之工厂方法模式(Factory Method)