进工厂——工厂方法模式

本文介绍了工厂方法模式,这是一种创建型设计模式,用于封装产品的创建过程,将产品类的实例化操作延迟到子类中进行,从而达到解耦和方便扩展的目的。文中通过水果手机和五谷手机的示例,展示了如何使用工厂方法模式创建不同类型的手机,并解释了在两种不同场景下的应用方式。
摘要由CSDN通过智能技术生成

工厂方法模式

在这里插入图片描述

工厂方法模式UML

工厂方法模式是一种常用的类创建型设计模式,此模式的核心精神是封装类中变化的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的

#pragma once
#include <iostream>

#define SAFE_DELETE(ptr) if(ptr!=NULL){delete ptr; ptr = NULL;}

using namespace std;

//抽象产品
class Product
{
public:
	virtual void Product_introduction() = 0;
};

//水果手机
class Fruit_Phone : public Product
{
	virtual void Product_introduction() { cout << "水果手机创新十足" << endl; }
};

//五谷手机
class WuGu_Phone : public Product
{
	virtual void Product_introduction() { cout << "五谷手机性价比强悍" << endl; }
};

//抽象工厂
class Factory 
{
public:
	virtual Product* createProduct() = 0;
};

//富土康工厂
class FuTuK_Factory : public Factory
{
public:
	virtual Product* createProduct() { return new Fruit_Phone; }
};

//新西方工厂
class XinXiF_Factory : public Factory
{
public:
	virtual Product* createProduct() { return new WuGu_Phone; }
};

int main()
{
	//富土康工厂的产品
	Factory* a = new FuTuK_Factory;
	Product* aP = a->createProduct();
	aP->Product_introduction();

	//新西方工厂的产品
	Factory* b = new XinXiF_Factory;
	Product* bP = b->createProduct();
	bP->Product_introduction();

	SAFE_DELETE(a)
	SAFE_DELETE(aP)
	SAFE_DELETE(b)
	SAFE_DELETE(bP)

	return 0;
}

模式应用:

第一种情况是对于某个产品,调用者清楚地知道应该使用哪个具体工厂服务,实例化该具体工厂,生产出具体的产品来。

第二种情况,只是需要一种产品,而不想知道也不需要知道究竟是哪个工厂为生产的,即最终选用哪个具体工厂的决定权在生产者一方,它们根据当前系统的情况来实例化一个具体的工厂返回给使用者,而这个决策过程这对于使用者来说是透明的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值