c++ 设计模式

工厂模式

1、简单工厂模式

#pragma once
#include <iostream>
#include <string>

using namespace std;

class fruit {
public:
	virtual string getCorlor() = 0;
};

class apple :public fruit {
public:
	virtual string getCorlor() {
		return "红色";
	}
};

class pear :public fruit {
public:
	virtual string getCorlor() {
		return "黄色";
	}
};

class orange :public fruit {
public:
	virtual string getCorlor() {
		return "橙色";
	}
};

enum FRUIT
{
	APPLE = 1,
	PEAR,
	ORANGE
};

class FactoryFruit {
private:
	fruit* f;
public:
	fruit* getFruit(FRUIT in) {
		switch (in)
		{
		case APPLE:
			f = new apple();
			break;
		case PEAR:
			f = new pear();
			break;
		case ORANGE:
			f = new orange();
			break;
		default:
			break;
		}
		return f;
	}
};

2、工厂方法模式

#pragma once
#include <iostream>
#include <string>

using namespace std;

class Sfruit {
public:
	virtual string getCorlor() = 0;
};

class Sapple :public Sfruit {
public:
	virtual string getCorlor() {
		return "红色";
	}
};

class Spear :public Sfruit {
public:
	virtual string getCorlor() {
		return "黄色";
	}
};

class Sorange :public Sfruit {
public:
	virtual string getCorlor() {
		return "橙色";
	}
};

class Factory {
public:
	virtual Sfruit* getFruit() = 0;
};

class appleFactory :public Factory{
public:
	virtual Sfruit* getFruit() {
		return new Sapple();
	}
};

class pearFactory :public Factory {
public:
	virtual Sfruit* getFruit() {
		return new Spear();
	}
};

class orangeFactory :public Factory {
public:
	virtual Sfruit* getFruit() {
		return new Sorange();
	}
};

3、抽象工厂模式

#pragma once
#include <iostream>
#include <string>

using namespace std;

class Afruit {
public:
	virtual string getCorlor() = 0;
};

class Aapple :public Afruit {
public:
	virtual string getCorlor() {
		return "红色";
	}
};

class Apear :public Afruit {
public:
	virtual string getCorlor() {
		return "黄色";
	}
};

class Aorange :public Afruit {
public:
	virtual string getCorlor() {
		return "橙色";
	}
};

class Veggie {
public:
	virtual string getshape() = 0;
};

class vegetables :public Veggie {
public:
	virtual string getshape() {
		return "方形";
	}
};

class onion :public Veggie{
public:
	virtual string getshape() {
		return "圆形";
	}
};

enum VEG {
	VEGTABLES=1,
	ONION
};

enum FRU {
	APP = 1,
	PE,
	ORA
};

class AFactory {
public:
	virtual Veggie* getVeg(VEG v) = 0;
	virtual Afruit* getCorlor(FRU e) = 0;
};

class DataAccess :public AFactory{
private:
	Veggie* veg;
	Afruit* af;
public:
	virtual Veggie* getVeg(VEG v) {
		switch (v) {
			case VEGTABLES:
				veg = new vegetables();
				break;
			case ONION:
				veg = new onion();
				break;
			default:
				break;
		}
		return veg;
	}

	virtual Afruit* getCorlor(FRU e) {
		switch (e) {
			case APP:
				af = new Aapple;
				break;
			case PE:
				af = new Apear;
				break;
			case ORA:
				af = new Aorange;
				break;
			default:
				break;
		}
		return af;
	}
};

主函数

#include "SimpleFactory.h"
#include "FactoryMethod.h"
#include "AbstractFactory.h"

int main() {
	/*
		简单工厂模式
	*/
	FactoryFruit* factory = new FactoryFruit();
	fruit* f = factory->getFruit(PEAR);
	cout << f->getCorlor() << endl;
	/*
		工厂方法模式
	*/
	Factory* ft = new appleFactory();
	Sfruit* r = ft->getFruit();
	cout << r->getCorlor() << endl;;
	/*
		抽象工厂模式
	*/
	AFactory* fc = new DataAccess;
	Afruit* fr = fc->getCorlor(ORA);
	Veggie* v = fc->getVeg(ONION);
	cout << fr->getCorlor() << endl;
	cout << v->getshape() << endl;
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值