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

一、概述

1、工厂方法模式:定义一个用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类

2、工厂方法模式:不再提供一个按钮工厂类来统一负责所有产品的创建,而是将具体的按钮创建过程交给专门的工厂子类去完成,满足开闭原则

3、工厂方法模式:工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象

二、工厂方法模式的结构

工厂方法模式包含以下4个角色

(1)Product(抽象产品)

(2)ConcreteProduct(具体产品)

(3)Factory(抽象工厂)

(4)ConcreteFactory(具体工厂)

三、模式优点

1、工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节

2、能够让工厂自主确定创建何种产品对象,而如何创建这个对象的细节则完全封装在具体工厂内部

3、在系统中加入新产品时,完全符合开闭原则

四、模式缺点

1、系统中类的个数将成对增加,在一定程度上增加了系统的复杂度,会给系统带来一些额外的开销

2、增加了系统的抽象性和理解难度

五、工厂方法模式示例代码

cpp 复制代码
#include <iostream>
using namespace std;

class Fruit
{
public:
	virtual void sayName() = 0;
};
class FruitFactory
{
public:
	virtual Fruit* getFruit() = 0;
};

//香蕉
class Banana : public Fruit
{
public:
	virtual void sayName()
	{
		cout << "Banana" << endl;
	}
};
//香蕉工厂
class BananaFactory : public FruitFactory
{
public:
	virtual Fruit* getFruit()
	{
		return new Banana;
	}
};

//苹果
class Apple : public Fruit
{
public:
	virtual void sayName()
	{
		cout << "Apple" << endl;
	}
};
//苹果工厂
class AppleFactory : public FruitFactory
{
public:
	virtual Fruit* getFruit()
	{
		return new Apple;
	}
};
int main()
{
	FruitFactory* factory = nullptr;
	Fruit* fruit = nullptr;

	factory = new BananaFactory;
	fruit = factory->getFruit();
	fruit->sayName();

	delete factory;
	delete fruit;
	return 0;
}
相关推荐
Hello.Reader3 分钟前
深入理解 Rust 的 `Rc<T>`:实现多所有权的智能指针
开发语言·后端·rust
程序员阿鹏5 分钟前
jdbc批量插入数据到MySQL
java·开发语言·数据库·mysql·intellij-idea
yoona10206 分钟前
Rust编程语言入门教程(八)所有权 Stack vs Heap
开发语言·后端·rust·区块链·学习方法
莲动渔舟7 分钟前
国产编辑器EverEdit - 在编辑器中对文本进行排序
java·开发语言·编辑器
滴_咕噜咕噜41 分钟前
C#基础总结:常用的数据结构
开发语言·数据结构·c#
martian66542 分钟前
【Java高级篇】——第16篇:高性能Java应用优化与调优
java·开发语言·jvm
许苑向上1 小时前
Java八股文(下)
java·开发语言
菜鸟一枚在这2 小时前
深入解析设计模式之单例模式
开发语言·javascript·单例模式
独孤求败Ace2 小时前
第44天:Web开发-JavaEE应用&反射机制&类加载器&利用链&成员变量&构造方法&抽象方法
java·开发语言
FLZJ_KL2 小时前
【设计模式】【创建型模式】单例模式(Singleton)
java·单例模式·设计模式