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

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

工厂方法模式是再简单工厂模式的方法下进行的改进,简单工厂模式有一个大的缺陷就是当要增加新的产品类时,就必须在核心工厂类的判断分支中增加对于新类的判断,即修改工厂类,这样违背了设计模式中的 开放,封闭原则。工厂方法对每一个产品类都建立一个工厂类,这样在增加产品时,只需要增加对应的工厂子类即可,而不必修改工厂父类。工厂方法的结构图如下所示:



// ConsoleApplication49.cpp : 定义控制台应用程序的入口点。
//工厂方法模式

#include "stdafx.h"
#include<iostream>
#include<string>
using namespace std;
class AbstractProduct{
public:
	virtual void operation() = 0;
	AbstractProduct(){};
	virtual ~AbstractProduct(){};

};
class productA :public AbstractProduct{
public:
	void operation(){
		cout <<"productA::op" << endl;
	}
	productA(){
		cout <<"productA()" << endl;
	};
	~productA(){
		cout <<"~productA " << endl;
	}

};
class productB :public AbstractProduct{
public:
	void operation(){
		cout << "productB::op" << endl;
	}
	productB(){
		cout << "productB()" << endl;
	};
	~productB(){
		cout << "~productB " << endl;
	}

};
class AbstractFactory{
public:
	virtual AbstractProduct* createProduct() = 0;
	AbstractFactory(){};
	virtual ~AbstractFactory(){};
};
class FactoryA: public AbstractFactory{
public:
	AbstractProduct* createProduct(){
		AbstractProduct *temp = new productA;
		return temp;
	};
	FactoryA(){
		cout <<"FactoryA " << endl;
	};
	~FactoryA(){
		cout << "~FactoryA " << endl;
	};

};
class FactoryB : public AbstractFactory{
public:
	AbstractProduct* createProduct(){
		AbstractProduct *temp = new productB;
		return temp;
	};
	FactoryB(){
		cout << "FactoryB " << endl;
	};
	~FactoryB(){
		cout << "~FactoryB " << endl;
	};

};
int _tmain(int argc, _TCHAR* argv[])
{
	AbstractFactory* factory = new FactoryA();
	AbstractProduct* product = factory->createProduct();
	product->operation();
    delete product;
	product = NULL;
	delete factory;
	factory = NULL;
	
    factory = new FactoryB();
	product = factory->createProduct();
	product->operation();
	delete product;
	product = NULL;
	delete factory;
	factory = NULL;
	system("pause");
	return 0;
}



适用场景

工厂方法模式的意义是定义创建产品类的工厂接口,而将将实际的创建工作留给工厂子类。核心工厂类不再负责产品的创建,这样核心工厂类就成为抽象工厂角色,只定义具体工厂子类需要实现的接口。

1 在设计初期就考虑到产品在后期会进行扩展,可以使用工厂模式。

2 产品结构比较复杂的情况下,可以使用工厂模式。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值