抽象工厂模式,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
抽象工厂模式的优点与缺点
优点:易于交换产品系列,由于具体工厂类在一个应用中只需要在初始化的时候出现一次,这样使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置。它让具体的创建实例过程与客户端分离,客户端是通过他们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户端代码中。
缺点:增加一个具体的产品类的时候需要更改原有的类,破坏了开放-封闭原则。
#include <iostream>
using namespace std;
class List_7 //手机7系列
{
public:
virtual void product(){}; //生产虚函数
virtual void sell(){}; //销售虚函数
};
class VIVO_7 : public List_7 //vivo7手机类
{
public:
void product() //生产方法
{
cout<<"生产一部vivo x7"<<endl;
}
void sell() //销售方法
{
cout<<"售出一部vivo x7"<<endl;
}
};
class APPLE_7 : public List_7 //iPhone7系列
{
public:
void product() //生产方法
{
cout<<"生产一部iphone7"<<endl;
}
void sell() //销售方法
{
cout<<"售出一部iPhone7"<<endl;
}
};
class List_PLUS7 //手机7plus系列
{
public:
virtual void product(){}; //生产虚函数
virtual void sell(){}; //销售虚函数
};
class VIVO_PLUS7 : public List_PLUS7 //vivo7plus手机
{
public:
void product() //生产方法
{
cout<<"生产一部vivo x7 plus"<<endl;
}
void sell() //销售方法
{
cout<<"售出一部vivo x7 plus"<<endl;
}
};
class APPLE_PLUS7 : public List_PLUS7 //iPhone7plus手机
{
public:
void product() //生产方法
{
cout<<"生产一部iphone7 plus"<<endl;
}
void sell() //销售方法
{
cout<<"售出一部iPhone7 plus"<<endl;
}
};
class IFactory //工厂类基类
{
public:
virtual List_7* createList7(){}; //7系列手机工厂
virtual List_PLUS7* createList7plus(){}; //7plus系列手机工厂
};
class VIVO_Factory : public IFactory //vivo工厂
{
public:
List_7* createList7() //vivo7生产
{
return (new VIVO_7);
}
List_PLUS7* createList7plus() //vivo7plus生产
{
return (new VIVO_PLUS7);
}
};
class APPLE_Factory : public IFactory //iPhone工厂
{
public:
List_7* createList7() //iPhone7生产
{
return (new APPLE_7);
}
List_PLUS7* createList7plus() //iPhone7plus生产
{
return (new APPLE_PLUS7);
}
};
int main()
{
IFactory* factory = new VIVO_Factory; //工厂类基类指针指向vivo手机工厂
List_7* vivix7 = factory->createList7(); //生产一部vivo7
vivix7->product();
vivix7->sell();
cout<<endl;
List_PLUS7* vivix7plus = factory->createList7plus(); //生产一部vivo7plus
vivix7plus->product();
vivix7plus->sell();
cout<<endl;
IFactory* apple_factory = new APPLE_Factory; //工厂类基类指针指向vivo手机工厂
List_7* APPLE7 = apple_factory->createList7(); //生产一部iphone7
APPLE7->product();
APPLE7->sell();
cout<<endl;
List_PLUS7* APPLE7PLUS = apple_factory->createList7plus(); //生产一部iphone7plus
APPLE7PLUS->product();
APPLE7PLUS->sell();
return 0;
}
显示结果: