设计模式 - 简单工厂模式/静态工厂模式(Static Factory Method) C++实现
2015-04-21 15:36
603 查看
简单工厂模式
简单工厂模式又叫静态工厂方法,不属于23种GOF模式之一。适用场景:在程序的各个地方都需要new一些常用的对象,并且对new的对象要进行一些初始化,new操作散落在程序的各个地方,不便于管理和维护,因此引入简单工厂模式来统一管理常见对象的创建。
客户调用工厂的方法,得到需要的产品,无需自己创建产品。
工厂根据客户传入的参数或者配置文件来决定创建什么类型的产品。
代码实现:
#include <iostream> using namespace std; typedef enum ProductType { TypeA, TypeB } PRODUCTTYPE; class AbsProduct { public : virtual void draw() = 0; }; class ProductA : public AbsProduct{ public : virtual void draw() { cout << "ProductA" << endl; } }; class ProductB : public AbsProduct{ public : virtual void draw() { cout << "ProductB" << endl; } }; class SimpleFatory { public : static AbsProduct * getProduct(PRODUCTTYPE type) { AbsProduct * product = NULL; if(type == TypeA) { product = new ProductA(); // do some thing } else if(type == TypeB) { product = new ProductB(); // do some thing } return product; } }; int main() { AbsProduct * product1 = SimpleFatory::getProduct(TypeA); AbsProduct * product2 = SimpleFatory::getProduct(TypeB); if(product1 != NULL) product1->draw(); if(product2 != NULL) product2->draw(); delete product1; product1 = NULL; delete product2; product2 = NULL; return 0; }
很明显,这个代码不符合开闭原则,当要增加一个产品时,不得不修改工厂里面的方法。
为了符合开闭原则,如果是Java语言,可以采用配置文件的方法,在getProduct方法里面读取配置文件,然后通过反射实例化相应的产品。
相关文章推荐
- 设计模式漫谈(1):Factory Method可以用static实现吗?
- 设计模式 - 工厂方法(Factory Method) C++实现
- 我所理解的设计模式(C++实现)——抽象工厂模式(Abstract Factory Pattern)
- 我所理解的设计模式(C++实现)——工厂方法模式(Factory Method Pattern)
- 我所理解的设计模式(C++实现)——工厂方法模式(Factory Method Pattern)
- 设计模式之工厂模式(Factory Pattern)用C++实现
- 设计模式之抽象工程模式Abstract Factory Pattern()C++实现
- 设计模式之C#实现(三)FactoryMethod
- 设计模式之C#实现(三)FactoryMethod
- 设计模式之C#实现--FactoryMethod
- 设计模式之C#实现(三)FactoryMethod
- 设计模式之C#实现(三)FactoryMethod
- 常见设计模式的解析和实现(C++)之一-Factory模式
- C++ 设计模式之二(Factory Method模式)
- C++设计模式之Factory Method
- 设计模式解析与实现(C++)之Factory模式
- C++设计模式之三:Factory Method(工厂方法)
- 浅谈C++设计模式之工厂方法(Factory Method)
- C++设计模式 之 “对象创建”模式:Factory Method、Abstract Factory、Prototype、Builder
- c++ 设计模式8 (Factory Method 工厂方法)