什么是工厂模式
很多的人学习的时候,都是走马观花式的学习,学习了都不理解,也不知道怎么去使用,讲的东西有什么用。学习过的东西最好是自己能够说出来,举个例子出来才算过关。
工厂模式,简单理解就是有这么一个类,这个类不是我们经常使用的类一样,它不是维护数据和处理数据的方法,它就是专门生产其他类的,就好比一个铁具生产厂一样,能够生产各式各样的工具,然后每种工具可以做不同的事情,类工厂生产普通的类,每个类的作用也不同一样。
工厂模式的结构
1.简单工厂模式
#include <iostream>
class A
{
public:
A(){}
~A(){}
void produce()
{
std::cout << "生产A商品" << std::endl;
}
};
class B
{
public:
B() {}
~B() {}
void produce()
{
std::cout << "生产B商品" << std::endl;
}
};
class Factory
{
public:
Factory(){}
~Factory(){}
void* createCode(int flag)
{
//这里可以设置自己要生产类的类型
if (flag == 0)
{
return new A;
}
else if (flag == 1)
{
return new B;
}
}
};
测试main
#include <iostream>
using namespace std;
int mian()
{
//创建工厂
Factory f;
//生产出A类
A* a=(A*)f.createCode(0);
a->produce();
//生产出B类
B* b=(B*)f.createCode(1);
b->produce();
}
2.工厂模式
发现上面的代码只能生产A,B商品,如果要生产C商品的话,我们就要去修改我们代码继续增加else if了,这就违背了软件设计的原则,对扩展开放,对修改关闭。因此我们要升级我们的代码。所以我们的工厂规模越来越大了,总公司就不在生产商品了,商品由各个不同子公司去生产。
#include <iostream>
class A
{
public:
A(){}
~A(){}
void produce()
{
std::cout << "生产A商品" << std::endl;
}
};
class B
{
public:
B() {}
~B() {}
void produce()
{
std::cout << "生产B商品" << std::endl;
}
};
class Factory
{
public:
Factory(){}
~Factory(){}
virtual void* createCode()=0;
};
//子工厂生产A商品
class FactoryA:public Factory
{
void* createCode()
{
return new A;
}
}
//子工厂生产B商品
class FactoryB:public Factory
{
void* createCode()
{
return new B;
}
}
//如果要生产C商品
class FactoryC:public Factory
{
void* createCode()
{
return new C;
}
}
测试
#include <iostream>
using namespace std;
int mian()
{
//生产A(多态的使用)
Factory *f =new FactoryA();
A* a=(A*)f->createCode();
//生产B(多态的使用)
Factory *f =new FactoryB();
B* b=(B*)f->createCode();
//生产C(多态的使用)
Factory *f =new FactoryB();
C* c=(C*)f->createCode();
}