设计模式----简单工厂模式(C++)

设计模式----简单工厂模式

简单工厂模式属于创建型模式,又叫静态工厂方法模式,但不属于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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章