设计模式之简单工厂

13 篇文章 0 订阅
10 篇文章 1 订阅

首先非常感谢睡仔:工厂模式,我的所有工厂模式的理解均来自于他的博客思想。

simplefactory.h

//设计模式之简单工厂模式
/*
简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例,由传入的参数决定创建那种类型的产品
优点:
1、解决了大量new的问题,
2、通过在类的内部创建对象,通常比直接创建对象更加灵活
缺点:
对修改不封闭,增加新产品时需要修改工厂(simplefactory)

理解:
如果你想吃饭了,怎么办自己做吗?自己做就相当于程序中直接使用new。当然是自己下个指令,别人来做更爽。
那就把做饭的任务交给你的老婆吧,那么她就是一个做饭的工厂了,你告诉她要要吃红烧肉,等会她就从厨房给
你端出来一盘香喷喷的红烧肉了,再来个清蒸鱼吧,大鱼大肉不能太多,那就再来个爆炒空心菜,最后再来个西红柿鸡蛋汤
显然到了这里,你是Client,你老婆就是工厂,她拥有做红烧肉的方法,做清蒸鱼的方法,做爆炒空心菜、
西红柿鸡蛋汤的方法,这些方法返回值就是食物抽象。红烧肉、清蒸鱼、爆炒空心菜、西红柿鸡蛋汤就是食物的继承类
*/

//定义产品类的基类
class product//cookfood
{
protected://控制不让用户直接实例化
	product();
public:
	virtual ~product();
	virtual void cooking() = 0;//做菜的接口
};

//一下每个实例化,相当于生成一个类型的产品

//实例化具体实例A,可以理解成做红烧鱼
class concreteproductA :public product
{
public:
	concreteproductA();
	virtual ~concreteproductA();
	virtual void cooking();//做菜
};
//实例化具体实例B,可以理解成做回锅肉
class concreteproductB :public product
{
public:
	concreteproductB();
	virtual ~concreteproductB();
	virtual void cooking();//做菜
};

//simplefactory//相当于老婆
class simplefactory
{
public:
	simplefactory();
	~simplefactory();
public:
	//根据需要生成哪个实例,做哪个菜
	product *createproduct(int producttype);
	product *createproductA();
	product *createproductB();
};


simplefactory.cpp

#include"simplefactory.h"
#include <stdio.h>

product::product()
{

}
product::~product()
{

}

concreteproductA::concreteproductA()
{
	printf("把老婆请过来准备做红烧鱼\n");
}
concreteproductA::~concreteproductA()
{
	printf("老婆做完了红烧鱼,回去了\n");
}
void concreteproductA::cooking()
{
	printf("老婆做了一份红烧鱼\n");
}

concreteproductB::concreteproductB()
{
	printf("把老婆请过来准备做回锅肉\n");
}
concreteproductB::~concreteproductB()
{
	printf("老婆做完了回锅肉,回去了\n");
}
void concreteproductB::cooking()
{
	printf("老婆做了一份回锅肉\n");
}
simplefactory::simplefactory()
{

}
simplefactory::~simplefactory()
{

}
product* simplefactory::createproduct(int producttype)
{
	product *p = NULL;
	switch (producttype)
	{
	case 0:
		p = new concreteproductA();
		break;
	case 1:
		p = new concreteproductB();
		break;
	default:
		p = new concreteproductA();
		break;
	}
	return p;
}
product * simplefactory::createproductA()
{
	product *p = new concreteproductA();
	return p;
}

product * simplefactory::createproductB()
{
	product *p = new concreteproductB();
	return p;
}

int main()
{
	simplefactory self;
	//想吃红烧鱼了
	product *productA = self.createproductA();
	productA->cooking();
	delete productA;
	productA = NULL;

	product *productB = self.createproductB();
	productB->cooking();
	delete productB;
	productB = NULL;

	return 0;
	
}


本文仅附上程序,理解的重点在simplefactory.h文件,主要看类之间的结构关系

另外,这篇博客介绍的非常好,仅供参考:http://blog.csdn.net/wuzhekai1985/article/details/6660462

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值