设计模式笔记之---工厂方法模式

本文介绍了设计模式中的工厂方法模式,它定义了一个创建对象的接口,由子类决定实例化哪个类。通过UML类图和代码示例,展示了如何在客户端中使用工厂方法模式进行产品对象的创建和管理。
摘要由CSDN通过智能技术生成

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

UML类图:

                   

工厂方法模式基本代码如下:

/********************************************************************
filename: 	FactoryMethod.h
created:	2012-09-21
author:		firehood

purpose:	firehood 学设计模式之---工厂方法模式
*********************************************************************/
#pragma once
#include <iostream>
using namespace std;
// 抽象产品
class Product
{
public:
	Product(){}
	virtual ~Product(){}
};

// 具体产品A
class ConcreteProductA : public Product
{
public:
	ConcreteProductA()
	{
		cout<<"生产产品A"<<endl;
	}
	virtual ~ConcreteProductA()
	{
        cout<<"销毁产品A"<<endl;
	}
};

// 具体产品B
class ConcreteProductB : public Product
{
public:
	ConcreteProductB()
	{
		cout<<"生产产品B"<<endl;
	}
	virtual ~ConcreteProductB()
	{
		cout<<"销毁产品B"<<endl;
	}
};

// 抽象工厂
class Creator
{
public:
	Creator(){};
	virtual ~Creator(){};
	Product* CreateProduct()
	{
		return FactoryMethod();
	}
protected:
	virtual Product* FactoryMethod() = 0;
};

// 具体工厂A
class ConcreteCreatorA : public Creator
{
public:
	ConcreteCreatorA()
	{
		cout<<"创建工厂A"<<endl;
	}
	virtual ~ConcreteCreatorA()
	{
		cout<<"销毁工厂A"<<endl;
	}
protected:
	virtual Product* FactoryMethod()
	{
		return new ConcreteProductA();
	}
};

// 具体工厂B
class ConcreteCreatorB : public Creator
{
public:
	ConcreteCreatorB()
	{
		cout<<"创建工厂B"<<endl;
	}
	virtual ~ConcreteCreatorB()
	{
		cout<<"销毁工厂B"<<endl;
	}
protected:
	virtual Product* FactoryMethod()
	{
		return new ConcreteProductB();
	}
};


客户端调用代码:

int main(int argc,char* argv[])
{
	cout<<"*************************************"<<endl;
	cout<<"firehood 学设计模式之---工厂方法模式"<<endl;
	cout<<"*************************************"<<endl;
    Creator *factoryA = new ConcreteCreatorA();
    Product *productA = factoryA->CreateProduct();

	Creator *factoryB = new ConcreteCreatorB();
	Product *productB = factoryB->CreateProduct();
    
	delete productA;
	delete factoryA;
	delete productB;
	delete factoryB;

    system("pause");
	return 0;
}

运行结果:

*************************************
firehood 学设计模式之---工厂方法模式
*************************************
创建工厂A
生产产品A
创建工厂B
生产产品B
销毁产品A
销毁工厂A
销毁产品B
销毁工厂B

请按任意键继续. . .

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值