C++设计模式(一):抽象工厂类

个人总结抽象工厂模式的具体思路就是:

1、创建若干个抽象类,例如:服装工厂类,上衣工厂类,裤子工厂类。

//1---实现抽象上衣类
class coat{
public:
	virtual const std::string& color() = 0;
};
//2---实现抽象裤子类
class pants{
public:
	virtual const std::string& color() = 0;
};
//3---创建抽象工厂类,提供衣服创建接口
class Factory{
public:
	virtual coat* creatcoat() = 0;
	virtual pants* creatpants() = 0;
};

2、继承抽象类,例如继承衣服、裤子抽象类,生成白色上衣、白色裤子等等。

class wcoat :public coat{//创建白色上衣
public:
	wcoat() :coat(), color_w("white"){}
	const std::string& color() override{
		std::cout << color_w.data() << std::endl;
		return color_w;
	}
private:
	std::string color_w;

};

class bcoat :public coat{//创建黑色上衣
public:
    bcoat() : coat(), color_b("black"){}
	std::string& color() override{
		std::cout << color_b.data() << std::endl;
		return color_b;
	}
private:
	std::string color_b;
};
class pantsw :public pants{//创建白色裤子
public:
	pantsw() :pants(), color_w("white"){}
	const std::string& color() override{
		std::cout << color_w.data() << std::endl;
		return color_w;
	}
private:
	std::string color_w;
};

3、最后一步,继承工厂类,比如某一个工厂要生产白色上衣、白色裤子,那我就可以创建一个生产白色上衣、白色裤子的工厂,以此类推。

class Factoryww :public Factory{
public:
	coat* creatcoat() override{
		return new wcoat();
	}
	pants* creatpants() override{
		return new pantsw();
	}

};

主程序:

int main(){
	//先创建一个工厂、在创建工厂中的衣服、裤子
	Factory* p = new Factoryww();
	coat* p1 = p->creatcoat();
	pants* p2 = p->creatpants();

	p1->color();
	p2->color();

	delete p2;
	p2 = nullptr;
	delete p1;
	p1 = nullptr;
	delete p;
	p = nullptr;

	return 0;
}

注意:delete指针后,一定要置空,因为delete只是释放指针指向的内存空间,不会删除这个指针本身。

以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值