工厂(方法)模式->自定义版本

这篇博客展示了如何利用工厂方法模式动态地创建不同类型的派生类对象,如MyA、MyB和MyC,这些类都继承自抽象基类MyBase。通过Factory类的模板方法GetObjPt,可以获取指向派生类实例的指针,并在适当的时候释放内存。在main函数中,创建并调用了这些对象的方法来演示工厂方法的应用。
摘要由CSDN通过智能技术生成
#include <iostream>
#include <vector>


class MyBase
{//基类->抽象类
public:
	virtual void Fun() = 0; 
	virtual ~MyBase() {} //要做为基类的类,最好提供一个虚析构函数
protected:
	MyBase() {}
};

class MyA : public MyBase
{//派生类A
public:
	virtual void Fun()
	{
		std::cout<<"In A Class\n";
	}
	~MyA()
	{
		std::cout<<"MyA was gone!\n";
	}
};

class MyB : public MyBase
{//派生类B
public:
	virtual void Fun()
	{
		std::cout<<"In B Class\n";
	}
	~MyB()
	{
		std::cout<<"MyB was gone!\n";
	}
};

class MyC : public MyBase
{//派生类C
public:
	virtual void Fun()
	{
		std::cout<<"In C Class\n";
	}
	~MyC()
	{
		std::cout<<"MyC was gone!\n";
	}
};

class Factory
{//工厂方法类
private:
	//用来管理该工厂构建出的对象的生存期
	std::vector<MyBase*> myPtList; 

public:
	template<class TBase>
	TBase * GetObjPt()
	{//工厂方法
		TBase * pb =new TBase;
		myPtList.push_back((MyBase*)pb);
		return pb;
	}

	~Factory()
	{
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值