设计模式之——工厂模式(FactoryMethodPattern)
来源:互联网 发布:知乎 张汶祥 编辑:程序博客网 时间:2024/06/07 05:22
工厂模式
简单工厂模式每次添加一个产品子类都必须在工厂类中添加一个判断分支,这样违背了开放-封闭原则,因此,工厂模式就是为了解决这个问题而产生的。
既然每次都要判断,那我就把这些判断都生成一个工厂子类,这样,每次添加产品子类的时候,只需再添加一个工厂子类就可以了。这样就完美的遵循了开放-封闭原则。但这其实也有问题,如果产品数量足够多,要维护的量就会增加,好在一般工厂子类只用来生成产品类,只要产品子类的名称不发生变化,那么基本工厂子类就不需要修改,每次只需要修改产品子类就可以了。
常用的场景
基本与简单工厂模式一致,只不过是改进了简单工厂模式中的开放-封闭原则的缺陷,使得模式更具有弹性。将实例化的过程推迟到子类中,由子类来决定实例化哪个。
优点:基本与简单工厂模式一致,多的一点优点就是遵循了开放-封闭原则,使得模式的灵活性更强。
缺点:与简单工厂模式差不多。
实例代码
//AbstractFactory.h#ifndef _ABSTRACTFACTORY_H_#define _ABSTRACTFACTORY_H_#include "AbstractProduct.h"class AbstractFactory{public:virtual AbstractProduct* CreateProduct()=0;};class FactoryA :public AbstractFactory{public:AbstractProduct* CreateProduct();};class FactoryB :public AbstractFactory{public:AbstractProduct* CreateProduct();};#endif
//AbstractFactory.cpp#include "stdafx.h"#include "AbstractFactory.h"AbstractProduct* FactoryA::CreateProduct(){return new ProductA;}AbstractProduct* FactoryB::CreateProduct(){return new ProductB;}
//AbstractProduct.h#ifndef _ABSTRACTPRODUCT_H_#define _ABSTRACTPRODUCT_H_class AbstractProduct{public:virtual void Operation() = 0;};class ProductA:public AbstractProduct{public:void Operation();};class ProductB:public AbstractProduct{public:void Operation();};#endif
//AbstractProduct.cpp#include "stdafx.h"#include "AbstractProduct.h"#include <iostream>using std::cout;using std::endl;void ProductA::Operation(){cout << "ProductA::Operation()" << endl;}void ProductB::Operation(){cout << "ProductB::Operation()" << endl;}
// FactoryMethodPattern.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"#include "AbstractFactory.h"int _tmain(int argc, _TCHAR* argv[]){AbstractFactory* pFactory = new FactoryA;AbstractProduct* pProductA = pFactory->CreateProduct();pProductA->Operation();delete pProductA;pProductA = NULL;delete pFactory;pFactory = NULL;pFactory = new FactoryB;AbstractProduct* pProductB = pFactory->CreateProduct();pProductB->Operation();delete pProductB;pProductB = NULL;delete pFactory;pFactory = NULL;return 0;}
0 0
- 设计模式之——工厂模式(FactoryMethodPattern)
- 工厂方法模式(FactoryMethodPattern)
- 工厂方法模式FactoryMethodPattern
- 简单工厂模式(SimpleFactoryPattern)对比工厂方法模式(FactoryMethodPattern)分析
- 设计模式之——工厂模式
- 设计模式之——工厂模式
- 设计模式之——工厂模式
- 设计模式之——工厂模式
- 设计模式之——Factory(工厂模式)
- 设计模式之(一)——工厂方法模式
- 设计模式之(二)——抽象工厂模式
- Java设计模式之工厂模式——简单工厂
- 设计模式——工厂模式之简单工厂
- 设计模式——工厂模式之工厂方法
- 设计模式之——工厂模式(简单工厂模式2)
- 设计模式之——工厂模式(简单工厂模式1)
- Java设计模式之——简单工厂模式(静态工厂模式)
- 设计模式——创建型模式之工厂模式
- Arduino: L293D for a DC motor
- 最新Eclipse SVN插件地址
- leetcode刷题系列C++-rotate image
- 原html标签分类
- Intent 传递对象
- 设计模式之——工厂模式(FactoryMethodPattern)
- html调试研究(三)-样式修改的需要了解的几个方面
- [Python学习]Python中的with语法
- java集合深度复制
- 第1章 Activity的生命周期和启动模式 1.2 Activity的启动模式
- Python split() 函数 拆分字符串 将字符串转化为列
- ARM处理器的“处理者模式(handler mode)”和“线程模式”
- fir.im Weekly - 2016 开年技术干货分享
- Spark Streaming实践和优化