设计模式-第五章-工厂方法模式

本文介绍工厂方法模式的基本概念,包括其角色定义、特点及代码实现。通过定义一个用于创建对象的接口,让子类决定实例化哪个类,使得类的实例化延迟到子类进行。

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

一、UML图

 

二、包含的角色

IProduct类,定义工厂方法创建对象的接口

ConreteProduct类,具体产品类,实现IProduct接口

ICreator类,工厂方法类基类,声明了工厂方法,该方法返回一个IProduct类。

ConcreteCreator类,重写工厂方法,返回ConcreteProduct实例。

三、特点

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

1.与简单工厂相比,制造产品的工厂类不只有一个,而是每种具体产品都对应一个生产它的具体工厂类,这些具体工厂类的共同特征再被提取出来形成一个抽象产品类,这些具体铲平类都继承自这个抽象产品类。

2.当需要增加一种产品的时候,需要做的是:增加一种继承自抽象产品的具体产品类,增加一个集成自抽象工厂的具体工厂类,改客户端,而不需要像简单工厂模式中那样更改工厂内的switch。

四、代码实现

ICreator类

#include "Product.h"

class ICreator {
public:
	virtual Product* FactoryMethod() =0;
};

IProduct类 

class IProduct
{
  public:
    virtual void Operation1() = 0;
};

 ConcreteProduct类

class ConcreteProduct : public IProduct
{
  public:
    void Operation1() override;
};

void ConcreteProduct::Operation1() {
     std::cout<<"ConcreteProduct Operation1!"<<std::endl;
}

ConcreteCreator类

class ConcreteCreator : public ICreator
{
public:
  IProduct *FactoryMethod() override;
};

IProduct* ConcreteCreator::FactoryMethod() {
    return new ConcreteProduct();
}

调用方式

ICreator *creator = new ConcreteCreator();
IProduct* product = creator->FactoryMethod();
product->Operation1();

delete product ;
delete creater ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值