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

工厂方法模式(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;
时间: 2024-11-09 00:41:31

C++我也来写个工厂模式的相关文章

设计模式之工厂模式:模拟DECLARE_DYNAMIC和IMPLEMENT_DYNAMIC动态创建类对象

该形式的工厂模式是我项目中用到的方法,属于很成熟的模版,读者可以直接拿来在自己项目中使用.个人感觉这种方法真正做到了"开放封闭"的原则,最大好处是用户产品类的设计完全不依赖于该模式的实现,比如提供必须的相关函数等.如果不理解工厂模式的话,请参考网上其它文章,本实现在理解上有一点小小的难度.好东西,大家慢慢享用,话不多说,先放代码! 首先是产品基类,它相当于一个接口,产品需要有什么动作就写在这里吧! #ifndef _CPRODUCTBASE_H_ #define _CPRODUCTBA

设计模式—简单工厂模式

设计模式之简单工厂模式 看书学习设计模式,书本来源<大话设计模式>,啃一啃怎么样设计程序 在"大话"这本书中写简单工厂模式用计算器为例来说明,其实是最简单的面向接口的编程思维,不依赖与具体的实现,而重点考虑接口.这是比较重要的思维上的转变. 重点: 1.通过继承,造成多态属性,然后在子类中实现父类的接口,在不同的子类中进行不同的接口实现.直接调用实现的接口方法得到最后的值,这一种思维够趣味 2.做增量,尽量不修改之前的,靠增加代码来更改需求 3.最通俗的说法,高内聚,低耦合

面试题复习-常用设计模式-工厂模式

手写一个工厂模式 产品接口: package com.ajax.pattern.factorymethod; public interface Fruit { void desc(); } 产品1: package com.ajax.pattern.factorymethod; public class Apple implements Fruit { @Override public void desc() { System.out.println("苹果"); } } 产品2: p

简单工厂模式小例子 写的测试过了

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace 笔记本品牌简单工厂模式 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 Console.WriteLine("请输入电脑的品牌:&q

设计模式 2/23 工厂模式

工厂模式是最常用的设计模式之一,用好了,代码优雅,可维护性高,对系统设计会上一个台阶 为什么这么说,因为工厂模式可以牵扯出抽象工厂模式,也有大家都会聊到的简单工厂模式 我们要了解一点,23中设计模式中,不包含简单工厂模式,之所以大家会去聊这个,四个字,渐进明细 通过对简单工厂模式的了解,我们引入工厂这个词,不然一个写代码的,天天给他讲工厂,工厂,工厂,西厂,东厂,会晕 同时,通过逐步的深入,从简单工厂,到工厂模式,再到抽象工厂,渐进明细的过程,逐步深入的理解,比较优劣,择优而为我们所用. 试想我

简单工厂模式

目前正在看<大话设计模式>,写此系列的文章记录下学习的经过. 简单工厂模式 先看如下代码,使用面向对象的原理实现计算器功能 Operation运算类 1 public class Operation 2 { 3 private double numberA = 0; 4 private double numberB = 0; 5 6 public double NumberA 7 { 8 get { return numberA; } 9 set { numberA = value; } 10

【设计模式】1、抽象工厂模式

对于这个抽象工厂的相应的代码实现 /** * 功能:抽象工厂模式的作用 适用性 1.一个系统要独立于它的产品的创建.组合和表示时. 2.一个系统要由多个产品系列中的一个来配置时. 3.当你要强调一系列相关的产品对象的设计以便进行联合使用时. 4.当你提供一个产品类库,而只想显示它们的接口而不是实现时. * 时间:2016年2月11日22:18 * 作者:cutter_point */ package com.shejimoshi.create.AbstractFactory; public in

【设计模式】简单工厂模式

以面向对象的思想和简单工厂模式,写一个C++计算器程序,代码如下: #include <iostream> using namespace std; class Operation { public: Operation(double left, double right) { lhs = left; rhs = right; } const double GetLeft() const { return lhs; } const double GetRight() const { retur

浅析设计模式之八 工厂模式

工厂模式被传的太多(有点烂大街的味道)我也就不贴代码了 简单工厂模式 不是设计模式,更像是一种编程习惯 设计模式中,所谓"实现一个接口"并"不一定"表示写一个类,implements某个Java接口 "实现一个 接口"泛指"实现某个超类型(可以是接口 或者接口 某个方法)" 所有的工厂模式用来封装对象的创建 工厂方法模式(Factory Method Pattern)通过让子类决定该创建的对象是什么 组成元素: 创建者类(cr