工厂模式
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;
}