design pattern的学习和思考(3)
来源:互联网 发布:丹麦警察知乎 编辑:程序博客网 时间:2024/06/05 08:23
工厂方法(Factory Method)
工厂方法是定义了一个创建对象的接口,专门负责创建此种类的对象,下面先来看一个非常简单的工厂方法
class Product
{}
class Creator
{
public:
Product* CreateProduct()
{
return new Product;
}
}
{}
class Creator
{
public:
Product* CreateProduct()
{
return new Product;
}
}
Creator就是一个工厂类,用来创建Product这个对象的实例,从本质上来说,工厂方法就是将对象的创建过程进行了封装,将类的实例化过程延迟了,这样做的一个显而易见的好处就是,我们可以通过继承Creator来指定具体实例化哪一个类。很多人也许已经想到,前面说的抽象工厂就是由一系列的工厂方法来实现的。
工厂方法的一个缺点是,我每有一个子类,就必须继承一个创建该子类的工厂类,这有可能使得代码量急剧增加,有几个方法可以避免这种情况,一个是实用带参数的创建方式,如下面的代码
class ProductA : public Product
{}
class ProductB : public Product
{}
class CreatorParam : public Creator
{
public:
Product* CreateProduct(int ProductID)
{
switch(ProductID)
{
case 0: return new ProductA;
case 1: return new ProductB;
default: return 0;
}
}
}
{}
class ProductB : public Product
{}
class CreatorParam : public Creator
{
public:
Product* CreateProduct(int ProductID)
{
switch(ProductID)
{
case 0: return new ProductA;
case 1: return new ProductB;
default: return 0;
}
}
}
还有一种办法是使用模板工厂,这种方法很灵活,而且对于创建不同的工厂类非常有效
template<typename T>
class TCreator
{
public:
Product* CreateProduct()
{
return new T;
}
}
//调用
TCreator<ProductA> CreatorForA; //ProductA的工厂类
TCreator<ProductA> CreatorForB; //ProductB的工厂类
class TCreator
{
public:
Product* CreateProduct()
{
return new T;
}
}
//调用
TCreator<ProductA> CreatorForA; //ProductA的工厂类
TCreator<ProductA> CreatorForB; //ProductB的工厂类
工厂方法非常简单和直观,也许在大家平时的编码中就会不知不觉的用到,我觉得,在选择创建型的模式中,可以优先考虑采用工厂方法,再在此基础上选择其他的模式来设计。
最后还是献上UML图
- design pattern的学习和思考(3)
- design pattern的学习和思考(1)
- design pattern的学习和思考(2)
- design pattern的学习和思考(4)
- 《Design Pattern》下的思考
- Design Pattern学习笔记之适配和外观(the Adapter and Facade Pattern)
- Design Pattern学习笔记之迭代器模式和复合模式(the Iterator and Composite Pattern)
- Java Design Pattern(3)
- Design Pattern学习笔记(一)
- Design Pattern学习笔记(三)
- 设计模式(design pattern) 学习记录
- Design Pattern学习笔记之装饰(Decorator Pattern)
- Design Pattern学习笔记之单例(Singleton Pattern)
- Design Pattern学习笔记之命令(Command Pattern)
- Design Pattern(3)-State Pattern
- Design pattern学习笔记 – observer pattern
- Design Pattern 3-Composite
- Singleton Pattern 和 Factory Pattern 的学习
- ......
- sql操作总结
- 用c#抓屏
- RCP的EditorPart保存后焦点控制
- TreeView递归生成树
- design pattern的学习和思考(3)
- grep 运用大全
- C++
- 利用Visual C#处理数字图像1
- 利用Visual C#处理数字图像(2)
- 创建自己的“IBM developerWorks”Feed
- 代码级的性能优化(二)
- 笔记本电脑维护技巧
- 使用Windows PowerShell来查看操作系统信息01——查看硬件信息