设计模式的解析和实现(C++)之一-Factory模式
2012-11-12 12:43
190 查看
作用:
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。
UML结构图:
抽象基类:
1)Product:创建出来的对象的抽象基类。
2)Factory创建对象的工厂方法的抽象基类。
接口函数:
1)Creator::FactoryMethod:纯虚函数,由派生类实现,创建出对应的Product.
解析:
在这个模式中,有两个抽象基类,一个是Product为创建出来的对象的抽象基类,一个是Factory是工厂的抽象基类,在互相协作的时候都是由相应的Factory派生类来生成Product的派生类,也就是说如果要新增一种Product那么也要对应的新增一个Factory,创建的过程委托给了这个Factory.也就是说一个Factory和一个Product是一一对应的关系。
备注:
设计模式的演示图上把Factory类命名为Creator,下面的实现沿用了这个命名。
演示实现:
1)Factory.h
2)Factory.cpp
3)Main.cpp(测试代码)
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。
UML结构图:
抽象基类:
1)Product:创建出来的对象的抽象基类。
2)Factory创建对象的工厂方法的抽象基类。
接口函数:
1)Creator::FactoryMethod:纯虚函数,由派生类实现,创建出对应的Product.
解析:
在这个模式中,有两个抽象基类,一个是Product为创建出来的对象的抽象基类,一个是Factory是工厂的抽象基类,在互相协作的时候都是由相应的Factory派生类来生成Product的派生类,也就是说如果要新增一种Product那么也要对应的新增一个Factory,创建的过程委托给了这个Factory.也就是说一个Factory和一个Product是一一对应的关系。
备注:
设计模式的演示图上把Factory类命名为Creator,下面的实现沿用了这个命名。
演示实现:
1)Factory.h
#ifndef FACTORY_H #define FACTORY_H class Product { public: Product(){} virtual ~Product(){} }; class ConcreateProduct : public Product { public: ConcreateProduct(); virtual ~ConcreateProduct(); }; class Creator { public: Creator(){} virtual ~Creator(){} void AnOperation(); protected: virtual Product* FactoryMethod() = 0; }; class ConcreateCreator : public Creator { public: ConcreateCreator(); virtual ~ConcreateCreator(); protected: virtual Product* FactoryMethod(); }; #endif |
#include "Factory.h" #include <iostream> using namespace std; ConcreateProduct::ConcreateProduct() { std::cout << "construction of ConcreateProductn"; } ConcreateProduct::~ConcreateProduct() { std::cout << "destruction of ConcreateProductn"; } void Creator::AnOperation() { Product* p = FactoryMethod(); std::cout << "an operation of productn"; } ConcreateCreator::ConcreateCreator() { std::cout << "construction of ConcreateCreatorn"; } ConcreateCreator::~ConcreateCreator() { std::cout << "destruction of ConcreateCreatorn"; } Product* ConcreateCreator::FactoryMethod() { return new ConcreateProduct(); } |
#include "Factory.h" #include <stdlib.h> int main(int argc,char* argv[]) { Creator *p = new ConcreateCreator(); p->AnOperation(); delete p; system("pause"); return 0; } |
相关文章推荐
- 设计模式的解析和实现(C++)之一-Factory模式
- 常见设计模式的解析和实现(C++)之一-Factory模式
- 常见设计模式的解析和实现(C++)之一-Factory模式
- 常见设计模式的解析和实现(C++)之十七-State模式
- 常见设计模式的解析和实现(C++)之九—Decorator模式
- 常见设计模式的解析和实现(C++)之九-Decorator模式
- 设计模式的解析和实现(C++)之十六-Strategy模式
- 常见设计模式的解析和实现(C++)之十六-Strategy模式
- 常见设计模式的解析和实现(C++)之五-Singleton模式
- 设计模式的解析和实现(C++)之-Prototype模式
- 常见设计模式的解析和实现(C++)之九-Decorator模式
- 常见设计模式解析和实现(C++)FlyWeight模式
- 常见设计模式的解析和实现(C++)之十-Proxy模式
- 设计模式的解析和实现(C++)之六-Adapt模式
- 设计模式的解析和实现(C++)之十七-State模式
- 常见设计模式的解析和实现(C++)之十五-Observer模式
- 常见设计模式的解析和实现(C++)之四-Prototype模式
- 常见设计模式的解析和实现(C++)之十-Proxy模式
- 常见设计模式的解析和实现(C++)之十八-Iterator模式
- 常见设计模式解析和实现(C++)Prototype模式(原型模式)