设计模式———抽象工厂方法||c++详解版

目录

 

什么是抽象工厂方法?

代码实现?

抽象工厂方法的特点?


什么是抽象工厂方法?

answer:抽象工厂模式是围绕一个超级工厂来创建其他工厂,该超级工厂又称为其他工厂的工厂。这种类型的创建模式属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是一个负责创建相关对象的工厂,不需要显示指定它们的类,每个生成的工厂都能够按照工厂模式来提供对象。

代码实现?

参见:https://blog.csdn.net/Aaron2521060899/article/details/89449296

// 键盘
class KeyBoard
{
public:
	virtual void show() = 0;
};
// 微软的键盘
class KeyBoardMicro : public KeyBoard
{
public:
	void show()
	{
		std::cout << "微软的键盘" << std::endl;
	}
};
// 联想的键盘
class KeyBoardLenovo : public KeyBoard
{
public:
	void show()
	{
		std::cout << "联想的键盘" << std::endl;
	}
};
// 鼠标
class Mouse
{
public:
	virtual void show() = 0;
};

//微软的鼠标
class MouseMicro : public Mouse
{
public:
	void show()
	{
		std::cout << "微软的鼠标" << std::endl;
	}
};

//联想的鼠标
class MouseLenovo : public Mouse
{
public:
	void show()
	{
		std::cout << "联想的鼠标" << std::endl;
	}
};
// 工厂
class Factory
{
public:
	virtual KeyBoard * createKeyBoard() = 0;
	virtual Mouse * createMouse() = 0;
};
// 微软的工厂
class FactoryMicro : public Factory
{
public:
	KeyBoard * createKeyBoard()
	{
		return new KeyBoardMicro();
	}
	Mouse * createMouse()
	{
		return new MouseMicro();
	}
};
// 联想的工厂
class FactoryLenovo : public Factory
{
public:
	KeyBoard * createKeyBoard()
	{
		return new KeyBoardLenovo();
	}
	Mouse * createMouse()
	{
		return new MouseLenovo();
	}
};

测试用例

#include <iostream>
#include "AbstractFactoryModel.h"
using namespace std;

int main()
{
	// 抽象工厂模式
	Factory * p = new FactoryMicro();
	KeyBoard * pKeyBoard = p->createKeyBoard();
	Mouse * pMouse = p->createMouse();
	pKeyBoard->show();
	pMouse->show();
	delete pMouse;
	delete pKeyBoard;
	delete p;

	p = new FactoryLenovo();
	pKeyBoard = p->createKeyBoard();
	pMouse = p->createMouse();
	pKeyBoard->show();
	pMouse->show();
	delete pMouse;
	delete pKeyBoard;
	delete p;

	system("pause");
	return 0;
}

抽象工厂方法的特点?

一个具体的工厂创建一个产品族,一个产品族是不同系列产品的组合,产品的创建逻辑分在每个具体的工厂类种。所有的具体工厂继承于一个抽象工厂。

客户端创建不同产品族的工厂,产品族工厂创建具体的产品对客户端来说是不可见的。

增加新的产品族时,需要增加具体的工厂类,符合OCP原则。

增加新的产品时,需要修改具体的工厂类和增加产品类,不符合OCP原则。

如果没有使用多系列产品的需求,则没有使用抽象工厂模式的必要。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值