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

工厂模式的核心思想

核心思想就是降低耦合

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

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

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

工厂方法设计模式

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

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

打个比方:现在有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;
}

在这里插入图片描述

工厂方法的优点

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

工厂方法的缺点

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值