设计模式----工厂方法模式

        工厂方法模式(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;
}

猜你喜欢

转载自blog.csdn.net/archar_saber/article/details/79845130