为了应对很多实际的生活中的问题,将实际的问题转换成代码,设计模式的学习确实很有用,简单学了两天的设计模式(断断续续)感
这两天抽空看了设计模式中的几种工厂模式,简单总结下吧
0、简单工厂
1、更加方便的设计模式都是在前者设计模式在实际应用中遇到了难题才才应运而生的,当我们设计程序时,不采用简单工厂模式,需要生产什么就直接new一个对应的对象(我们将一个产品看成C++中的一个对象)显然一开始是可以解决问题的,但是当我们需要的产品数量越来越多时,程序每次用都要调用一次new(另外还需要考虑对象的delete,防止内存泄漏)结果就是代码从结构和管理上都变得越来越复杂(这里提一下,我并没有在实际的项目中遇到这样的问题(因为我并没有实际的项目T_T),这样的问题只是根据实际推导而来的),因此,简单工厂模式应运而生
2、简单工厂利用枚举类型来告诉工厂生产什么样的产品
3、简单工厂模式,将产品和产品的生产(工厂,也就是new)区别开来,使得代码更易读
#include <iostream>
using namespace std;
typedef enum Windows_type //创建枚举类型,工厂可以生产的产品有,up窗,down窗,mean窗
{
windows_up,
windows_down, //蹩脚的英文
windows_mean
}WINDOWSTYPE;
class Product
{
public:
virtual void func() = 0;
};
class Product_windows_up : public Product //全部公有继承
{
public:
void func()
{
cout << "这里创建了一个up窗口" << endl;
}
};
class Product_windows_down : public Product
{
public:
void func()
{
cout << "这里创建了一个dowm窗口" << endl;
}
};
class Product_windows_mean : public Product
{
public:
void func()
{
cout << "这里创建了一个mean窗口" << endl;
}
};
class Fectory
{
public:
Product * Create_windows(WINDOWSTYPE type) //当工厂需要生产产品时,传入产品类型
{
switch (type)
{
case windows_up:
return new Product_windows_up();
case windows_down:
return new Product_windows_down();
case windows_mean:
return new Product_windows_mean();
default:
return NULL;
}
}
};
void main()
{
Fectory *Product_Fectory = new Fectory;
Product *Product_up1 = Product_Fectory->Create_windows(windows_up);
Product *Product_down1 = Product_Fectory->Create_windows(windows_down);
Product *Product_mean1 = Product_Fectory->Create_windows(windows_mean);
Product_up1->func();
Product_down1->func();
Product_mean1->func();
if (Product_up1 != NULL)
{
cout << "Product_up1被释放" << endl;
delete Product_up1;
Product_up1 = NULL;
}
if (Product_down1 != NULL)
{
cout << "Product_down1被释放" << endl;
delete Product_down1;
Product_down1 = NULL;
}
if (Product_mean1 != NULL)
{
cout << "Product_mean1被释放" << endl;
delete Product_mean1;
Product_mean1 = NULL;
}
system("pause");
}
4前面说设计模式的由来都来自现实生活中在程序中反映的问题,于是当现实工厂需要生产其他的产品扩大销售时,对于简单工厂来说,我们需要更改枚举类型,更改工厂类的switch函数,显然这样的改变不是代码的扩展,甚至前期进行过得代码的测试都需要重新来过,于是,工厂方法模式应运而生。