文档章节

C++我也来写个工厂模式

Micooz
 Micooz
发布于 2014/08/28 14:06
字数 512
阅读 573
收藏 3

工厂方法模式(Factory method pattern)是一种实现了“工厂”概念的面向对象设计模式。就像其他创建型模式一样,它也是处理在不指定对象具体类型的情况下创建对象的问题。工厂方法模式的实质是“定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。

以前是没有实现过工厂模式,这里我用到了template来创建类型不同的Products,内存管理这块没想到更好的办法来cleanup,打算是利用析构自动release,不过貌似到模版里就捉禁见肘了。。大家有什么高见?

#include <iostream>
#include <vector>

// ProductA

class ProductA
{
public:
	void name();
};

void ProductA::name()
{
	std::cout << "I'm Product A." << std::endl;
}

// ProductB

class ProductB
{
public:
	void name();
};

void ProductB::name()
{
	std::cout << "I'm Product B." << std::endl;
}


// Factory
template<typename T>
class Factory
{
public:
	static T* create();
	static void cleanup();
private:
	Factory();
	static std::vector<T*> objs_;
};
template<typename T>
std::vector<T*> Factory<T>::objs_;

template<typename T>
Factory<T>::Factory()
{
}

template<typename T>
void Factory<T>::cleanup()
{
	for each (T* obj in objs_)
		if (obj)
		{
		std::cout << "release " << obj << std::endl;
		delete obj;
		obj = nullptr;
		}
	objs_.clear();
}

template<typename T>
T* Factory<T>::create()
{
	T * obj = new T;
	objs_.push_back(obj);

	return obj;
}

int main(int argc, char *argv[])
{
	//create 10 ProductAs
	for (size_t i = 1; i <= 10; i++)
	{
		auto pa = Factory<ProductA>::create();
		pa->name();
	}

	//create 10 ProductBs
	for (size_t i = 1; i <= 10; i++)
	{
		auto pb = Factory<ProductB>::create();
		pb->name();
	}

	//free memory
	Factory<ProductA>::cleanup();
	Factory<ProductB>::cleanup();

	return 0;

© 著作权归作者所有

Micooz
粉丝 40
博文 34
码字总数 51094
作品 1
其它
其他
私信 提问
大家一起来说一说自己掌握的设计模式

做了比较多的通讯和SDK,虽然是用C++,但是SDK对外的都是C的接口,而且项目中主要是消息封装,socket IO模型和多线程, 消息收发,业务比较少,所以用的OOP也比较少,用了很多年C++,却一直没有...

沉淀岁月
2013/09/10
209
0
Android 网络编程 目录

Android 网络编程 目录 Android 网络编程1 Http协议 Android 网络编程2 Okhttp缓存机制 Android 网络编程3 Java NIO to be continued... Android 架构师之路 目录 Android 架构师之路1 UML图...

香沙小熊
2018/06/21
0
0
Cocos2d-x设计模式--二段构建模式

设计模式在程序设计中会经常用到,也许你从来没有留意过设计模式,其实你却一直在使用设计模式!cocos2dx中有不少的设计模式,所以从本篇博客开始探讨一下cocos2dx中的设计模式,看看引擎都使...

_子墨
2014/09/15
240
0
碰上个"应试"面试官

今天去一公司面试,一去就给我做题,一共只有6题,上面写着“一小时内完成”,我心想这题目是有多难啊?6题要做1个小时。。。第一题是测试对指针的理解,这题我做对了,可是面试官说我错了,...

一如当初
2014/07/25
3.6K
32
设计模式之简单工厂模式学习

学习C++有一两年了,面向对象思想也有所接触。使用过MFC以及OSG类库进行过开发,无非就是调用别人设计好的类库,要说自己使用面向对象的思想去开发程序,这个还真没有。 意识到自己在这方面的...

长平狐
2012/10/08
66
0

没有更多内容

加载失败,请刷新页面

加载更多

查看线上日志常用命令

cat 命令(文本输出命令) 通常查找出错误日志 cat error.log | grep 'nick' , 这时候我们要输出当前这个日志的前后几行: 显示file文件里匹配nick那行以及上下5行 cat error.log | grep -C ...

xiaolyuh
9分钟前
3
0
六、Java设计模式之工厂方法

工厂方法定义: 定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行 类型:创建型 工厂方法-使用场景: 创建对象需要大量重复的代码 ...

东风破2019
16分钟前
2
0
win服务器管理遇到的一系列问题记录

有些小伙伴在使用iis7远程桌面管理工具的时候总是会遇到一系列的问题,下面就是为大家介绍一下服务器日常管理过程中出现的问题及我的解决办法和心得。希望能帮到大家。   拒绝服务器重新启...

1717197346
23分钟前
2
0
flutter 剪切板 复制粘贴

复制粘贴功能 import 'package:flutter/services.dart'; Clipboard.setData(ClipboardData(text:_text));Clipboard.getData;...

zdglf
25分钟前
2
0
如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题?

面试题 如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题? 面试官心理分析 这个是肯定的,用 MQ 有个基本原则,就是数据不能多一条,也不能少一条,不能多,就是前面说的重复消费...

米兜
26分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部