个人总结抽象工厂模式的具体思路就是:
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只是释放指针指向的内存空间,不会删除这个指针本身。
以上。