创建型模式----工厂方法模式(C++)

创建型模式----工厂方法模式

工厂方法模式的核心是封装类中变化的部分,提取其中善变的部分为独立类,通过依赖注入以达到解耦、复用和方便拓展的目的

工厂方法模式可以解决简单工厂模式的后期拓展问题,不违反“开闭原则”

实现方式

工厂方法模式对简单工厂模式进行了抽象,将工厂(Factory)类抽象化,这个类不再负责产品的创建,而是只指定一些规范,具体的生产工作由其子类完成,这样工厂类和产品类就可以依次对应

角色结构

工厂方法模式的角色分别包括:

  • 抽象工厂:是工厂方法的核心,与应用程序无关,任何在模式中创建的对象的工厂类必须实现这个接口
  • 具体工厂:是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象
  • 抽象产品:工厂方法模式创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口
  • 具体产品:它实现了抽象产品所定义的接口
特性

工厂放发模式 = 简单工厂模式+“开闭原则”

优点
  • 不需要了解工厂内部实现
  • 实现了对象创建和使用的分离
  • 系统的拓展性更好
缺点
  • 增加了系统中类的个数,系统复杂度增加
  • 增加了系统的抽象性和理解难度
工厂方法模式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 AbstractFactory
{
public:
	virtual Shape* CreatFactory() = 0;
};

//矩形工厂
class RectFactory : public AbstractFactory {
public:
	virtual Rect* CreatFactory() {
		return new Rect;
	}
};

//圆形工厂
class CircleFactory : public AbstractFactory {
public:
	virtual Circle* CreatFactory() {
		return new Circle;
	}
};

int main()
{
	AbstractFactory* factory = NULL;
	Shape *shape = NULL;

	factory = new RectFactory;
	shape = factory->CreatFactory();
	shape->showName();

	delete factory;
	delete shape;

	factory = new CircleFactory;
	shape = factory->CreatFactory();
	shape->showName();

	delete factory;
	delete shape;

	system("pause");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值