C++工厂模式个人总结

通过阅读某些大型项目源码发现,工厂模式在分模块设计和可扩展的需求下是一个很好的帮手。下面是本人自己结合智能指针和类模板来进行分文件编写的demo。如果需要扩展具体的物品类(这里用car类为例),只需要增加新的factory工厂类和新的car物品类,在createObj 模板类提供了生成新物品类对象的接口,因此增加了新工厂类和新物品类后在main.cpp中直接改模板类型就可以实现扩展。
//main.cpp
#include <iostream>
#include <memory.h>
#include "car1.h"
#include "car2.h"
#include "factory1.h"
#include "factory2.h"
#include "factory3.h"
#include "kmain.hpp"
using namespace std;

int main() {
	//Base工厂T1,具体工厂T2,Base物品T3
	//生成的obj->m_car是对应物品的具体类对象
	unique_ptr<createObj<FactoryBase, Factory1, Car>> obj1(new createObj<FactoryBase, Factory1, Car>()); 
	obj1->m_car->play();

/*
	unique_ptr<createObj<FactoryBase, Factory2, Car>> obj2(new createObj<FactoryBase, Factory2, Car>());
	obj2->m_car->play();

	unique_ptr<createObj<FactoryBase, Factory3, Car>> obj3(new createObj<FactoryBase, Factory3, Car>());
	obj3->m_car->play();
*/
	return 0;
}
//kmain.hpp
#include <iostream>
#include <memory.h>
#include "car1.h"
#include "car2.h"
#include "factory1.h"
#include "factory2.h"
using namespace std;

//Base工厂T1,具体工厂T2,Base物品T3
template<class T1, class T2, class T3>
class createObj {
public:
	createObj(){
		this->m_factory = createFactory();
		this->m_car = this->m_factory->create();
	}
	shared_ptr<T1> createFactory(){
		return make_shared<T2>();
	}
public:
	shared_ptr<T1> m_factory;
	shared_ptr<T3> m_car;
};

物品类:

//CarBase.h
#pragma once
class Car {
public:
	virtual void play() = 0;
};
//car1.h
#pragma once
#include "CarBase.h"

class Car1 : public Car {
public:
	void play() override;
	~Car1();
};
//car1.cpp
#include "car1.h"
#include <iostream>
using namespace std;

void Car1::play() {
	cout << "Car1:奔驰" << endl;
}

Car1::~Car1() {
	cout << "奔驰释放了" << endl;
}

工厂类

//factorybase.h
#pragma once
#include <memory>
#include "CarBase.h"
class FactoryBase {
public:
	virtual std::shared_ptr<Car> create() = 0;
};
//factory1.h
#pragma once
#include "factorybase.h"

class Factory1 : public FactoryBase {
public:
	std::shared_ptr<Car> create() override;
	~Factory1();
};
//factory1.cpp
#include "factory1.h"
#include <memory>
#include <iostream>
#include "car1.h"

std::shared_ptr<Car> Factory1::create() {
		std::shared_ptr<Car> c1 = std::make_shared<Car1>();
		return c1;
}

Factory1::~Factory1() {
	std::cout << "工厂1释放了" << std::endl;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值