工厂方法:父类负责定义创建对象的公共接口,而之类负责生产具体的对象。将类的实例化操作延迟到之类中完成,即由子类决定实例化哪个类。
class Product
{
public:
virtual void Show()=0;
};
class ProductA:public Product
{
public:
void Show()
{
cout<<"ProductA"<<endl;
}
};
class ProductB:public Product
{
public:
void Show()
{
cout<<"ProductB"<<endl;
}
};
class Factory
{
public:
virtual Product *CreateProduct()=0;
};
class Factory1:public Factory
{
public:
Product *CreateProduct()
{
return new ProductA();
}
};
class Factory2:public Factory
{
public:
Product *CreateProduct()
{
return new ProductB();
}
};
int main()
{
Factory *pF=new Factory1();
Product *pA=pF->CreateProduct();
pA->Show();
return 0;
}
工厂方法把简单工厂的内部逻辑判断移到客户端代码来进行(new Factory1())。
1.一个抽象产品类,可派生出多个具体的产品。抽象产品product,派生出productA,productB
2.一个抽象工厂类,可派生出多个具体的工厂类。抽象工厂Factory,派生出Factory1,Factory2
3.每个具体工厂类只能创建一个具体产品类的实例。具体工厂类Factory1只能产生productA,具体工厂类Factory2只能产生productB