C++实现抽象工厂模式

抽象类(接口):

#ifndef COLOR_CPP_  
#define COLOR_CPP_
class Color
{
	public:
	virtual void draw() = 0;
};
#endif

virtual void draw() = 0; 

纯虚函数,相当于java的接口方法;

 

#ifndef COLOR_CPP_  
#define COLOR_CPP_

....

#endif

这种写法的原因是:抽象类要被实体类继承,每一个实体类都要include同一个文件,就会报错:

Error:redefinition of class,添加宏定义就会避免这种错误。

实体类:

#include"color.cpp"
#include<iostream.h>
class Red:public Color
{
	public:
	Red(){};
	void draw()
	{
		cout<<"Red"<<endl;
	}
};
#include"color.cpp"
#include<iostream.h>
class Green:public Color
{
	public:
	Green(){};
	void draw()
	{
		cout<<"Green"<<endl;
	}
};

继承抽象类,相当于实现接口,就要实现所有纯虚函数(接口方法)。

构造函数可以不写,使用默认构造函数;

抽象工厂类

#include"color.cpp"
class AbstractFactory
{
	public:
	virtual Color* getColor(char type[]) = 0;
};

纯虚函数返回Color类的对象指针。

实体工程类

#include"AbstractFactory.cpp"
#include"color.cpp"
#include"red.cpp"
#include"green.cpp"
#include<string.h>
class ColorFactory:public AbstractFactory
{
	public:
	Color* getColor(char type[])
	{
		if(strcmp(type,"red") == 0)
		{
			return new Red();
		}	
		else if(strcmp(type,"green") == 0)
		{
			return new Green();
		}
	}
};

同样,继承抽象类就要实现纯虚函数,跟java是一样的道理;

抽象类至少有一个纯虚函数。

主函数

#include"ColorFactory.cpp"
#include<iostream.h>
void main()
{
	char type[5] = {};
	cout<<"输入颜色"<<endl;
	cin>>type;
	ColorFactory* colorFactory = new ColorFactory();
	Color* color = colorFactory -> getColor(type);
	color -> draw();
}

->  的含义是 对象指针指向函数 跟java是一样的。

运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值