设计模式----简单工厂模式
简单工厂模式属于创建型模式,又叫静态工厂方法模式,但不属于23种GOF模式之一
简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例,它是工厂模式种最简单实用的模式
实现方式
简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪种产品类的实例
简单工厂模式所包含的角色和职责如下:
- 工厂角色:简单工厂模式的核心,它负责实现创建所有实例的内部逻辑;工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象
- 抽象产品角色:简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口
- 具体产品角色:简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例
简单工厂模式的UML类图
特性
优点
工厂类是整个模式的关键,包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界无需了解对象的创建过程,更有利于软件体系结构的优化
缺点
由于工厂类几种所有实例的创建逻辑,违反了单一职责原则
如果新增对象的种类,则需要更改工厂类的源代码,违法了"开闭原则"
简单工厂模式实例
#include <iostream>
using namespace std;
//抽象形状
class Shape{
public:
virtual void showName() = 0;
};
//矩形
class Rect : public Shape{
public:
virtual void showName()
{
cout << "我是矩形!" << endl;
}
};
//圆形
class Circle : public Shape {
public:
virtual void showName()
{
cout << "我是圆形!" << endl;
}
};
//形状工厂
class ShapeFactory
{
public:
static Shape* Create(string type)
{
if (type == "矩形")
return new Rect;
else if (type == "圆形")
return new Circle;
else
return NULL;
}
};
int main()
{
ShapeFactory* factory = new ShapeFactory;
Shape* rect = factory->Create("矩形");
rect->showName();
Shape *cricle = factory->Create("圆形");
cricle->showName();
system("pause");
return 0;
}