C++设计模式 | 工厂模式之工厂方法模式详解

本文围绕工厂方法设计模式展开,介绍其核心思想是降低耦合,使程序结构清晰、便于修改和复用。阐述了该模式定义,即让子类决定实例化类,遵循开放 - 封闭原则。还分析了其优缺点,优点是满足开放封闭,缺点是增加产品时会增加开发量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工厂模式的核心思想

核心思想就是降低耦合

工厂模式是为了使得程序统一,降低各个模块之间的耦合,达到结构清晰的目的。

降低耦合指的是:降低各个模块、各个类之间的联系,为了修改的时候可以方便,以免引起修改了一处,其他各处全需要修改,也为了将来复用代码。

举个例子,比如给一个字符串,为了统计小写、大写、数字的个数,将来还要扩展统计其他汉字、韩文等个数,首先他们有个共同的特性,就是统计个数,这就需要工厂模式了。

工厂方法设计模式

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

既然每次都要判断,那就把这些判断都生成一个工厂子类,这样,每次添加产品子类的时候,只需再添加一个工厂子类就可以了。这样就完美的遵循了开放-封闭原则。但这其实也有问题,如果产品数量足够多,要维护的量就会增加,好在一般工厂子类只用来生成产品类,只要产品子类的名称不发生变化,那么基本工厂子类就不需要修改。每次只需要修改产品子类就可以了。

打个比方:现在有A、B两种产品,那么就开两个工厂。工厂A负责生产A产品,工厂B负责生产B产品。这时候客户不需要告诉工厂生产哪种产品了,只需要告诉工厂生产就可以了。

//工厂方法设计模式.cpp : 定义控制台应用程序的入口点。

#include<iostream>
using namespace std;

enum TYPES	//产品类型
{
	TYPEA, TYPEB
};

class BASE	//抽象产品类
{
public:
	virtual void show() = 0;
};

class A :public BASE	//具体A产品类
{
public:
	void show()
	{
		cout << "A show!" << endl;
	}
};

class B :public BASE	//具体B产品类
{
public:
	void show()
	{
		cout << "B show!" << endl;
	}
};

class Factory	//抽象工厂类
{
	virtual BASE* CREATEBASE(enum TYPES c) = 0;
};

class FactoryA:public Factory	//具体工厂A类
{
public:
	BASE* CREATEBASE(enum TYPES c)
	{
		cout << "Create A!" << endl;
		return new A;
	}
};

class FactoryB:public Factory	//具体工厂B类
{
public:
	BASE* CREATEBASE(enum TYPES c)
	{
		cout << "Create B!" << endl;
		return new B;
	}
};

int main()
{
	FactoryA m;
	BASE *p = m.CREATEBASE(TYPEA);
	p->show();
	FactoryB n;
	p = n.CREATEBASE(TYPEB);
	p->show();
	return 0;
}

在这里插入图片描述

工厂方法的优点

在简单工厂方法中,每次添加一个产品子类都必须在工厂类中添加一个判断分支,这样违背了开放-封闭原则,工厂方法克服了简单工厂的缺点,增加新的产品时,不必修改现存的代码,而只需增加新代码。满足开放封闭原则。

工厂方法的缺点

每增加一个产品,就需要增加一个对应产品的工厂类,增加了额外的开发量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值