简单工厂模式
#include<iostream>
#include<string>
using namespace std;
enum type{EWATER,ECREAM};
class SkinProduct{
public:
virtual void createProduct()=0;
};
class Water:public SkinProduct{
public:
void createProduct(){
cout<<"creat water skin product."<<endl;
}
};
class Cream:public SkinProduct{
public:
void createProduct(){
cout<<"create cream skin product."<<endl;
}
};
class SkinFactory{
public:
SkinProduct* creatOneProduct(type skinType){
switch (skinType) {
case EWATER:
return new Water();
case ECREAM:
return new Cream();
default:
return NULL;
}
}
};
int main(){
SkinFactory skf;
SkinProduct *skp=skf.creatOneProduct(EWATER);
delete skp;
return 0;
}
不遵守开放封闭原则,当要增加新的护肤品种类时,需要修改工厂类
工厂方法模式
工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。它修正了简单工厂模式中不遵守开放—封闭原则。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。
#include<iostream>
#include<string>
using namespace std;
class SkinProduct{
public:
virtual void createProduct()=0;
};
class Water:public SkinProduct{
public:
void createProduct(){
cout<<"creat water skin product."<<endl;
}
};
class Cream:public SkinProduct{
public:
void createProduct(){
cout<<"create cream skin product."<<endl;
}
};
class SkinFactory{
public:
virtual SkinProduct* creatOneProduct()=0;
};
class WaterFactory:pu