工厂方法模式(Factory Method Pattern):工厂方法模式又简称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态模式,属于类的创建型模式。在工厂方法模式中,父类负责定义创建对象的公共接口,而子类则负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成,即由子类来决定究竟应该实例化(创建) 哪一个类。
工厂方法模式的优点:使用工厂方法模式的另一个优点是在系统中加入新产品时,无需修改抽象工厂和抽象产品提供的接口,无需修改客户端,也无需修改其它的具体工厂和具体产品,而只要添加一个新的具体工厂和具体产品即可。工厂方法模式的缺点:在添加新产品时,需要编写新的具体产品类,而且还要提供与之对应的具体工厂类,类成对增加,将导致系统设计较为庞大,且运行时系统会有额外的开销。由于考虑到系统的可扩展性,需要引入抽象层,在客户端代码中均使用抽象层进行定义,增加了系统的抽象性和理解难度,且在实现的时候可能需要用到反射等技术,增加了系统的实现难度。
具体实例:
#include<iostream>
using namespace std;
class Laptop{
public:
Laptop(){}
virtual void Product(){}
};
class Dell : public Laptop{
public:
Dell(){}
void Product(){
cout<<"生产Dell"<<endl;
}
};
class Acer : public Laptop{
public:
Acer(){}
void Product(){
cout<<"生产Acer"<<endl;
}
};
class Lenovo : public Laptop{
public:
Lenovo(){}
void Product(){
cout<<"生产Lenovo"<<endl;
}
};
class HP : public Laptop{
public:
HP(){}
void Product(){
cout<<"生产HP"<<endl;
}
};
class Factory{
public:
Factory(){}
virtual Laptop* CreateLaptop()=0;
};
class HP_Factory : public Factory{
public:
HP_Factory(){}
Laptop* CreateLaptop(){
return new HP();
}
};
class Acer_Factory : public Factory{
public:
Acer_Factory(){}
Laptop* CreateLaptop(){
return new Acer();
}
};
class Lenovo_Factory : public Factory{
public:
Lenovo_Factory(){}
Laptop* CreateLaptop(){
return new Lenovo();
}
};
class Dell_Factory : public Factory{
public:
Dell_Factory(){}
Laptop* CreateLaptop(){
return new Dell();
}
};
int main(){
Factory* factory=new Dell_Factory();
Laptop* laptop=factory->CreateLaptop();
laptop->Product();
return 0;
}