设计模式(2)--对象创建(3)--工厂方法

1. 意图

    定义一个用于创建对象的接口,让子类决定实例化哪一个类。

    工厂方法使一个类的实例化延迟到其子类。

2. 四种角色

    抽象产品、具体产品、抽象构造者、具体构造者

3. 优点

    3.1 仅处理抽象产品(Product)接口

    3.2 给子类一个钩子(hook)以提供对象的扩展版本(父类有个缺省版本)

    3.3 可以连接平行的类层次(职责委托)

4. 缺点

    4.1 可能为了创建一个特定的具体产品对象,不得不创建一个具体构造者。

5. 相关模式

    5.1 抽象工厂经常用工厂方法来实现

    5.2 工厂方法通常在模板方法中被调用

    5.3 原型不需要创建Creator子类,但需要Creator初始化产品对象,工厂方法则不需要。

6. 代码示意(C++)
#pragma once
#include <iostream>
using namespace std;

class Product
{
public:
	virtual void Operation1() = 0;
	virtual void Operation2() = 0;
};
class ConcreteProduct1 : public Product
{
public:
	virtual void Operation1() {
		cout << "ConcreteProduct1:操作1" << endl;
	}
	virtual void Operation2() {
		cout << "ConcreteProduct1:操作2" << endl;
	}
};
class ConcreteProduct2 : public Product
{
public:
	virtual void Operation1() {
		cout << "ConcreteProduct2:操作1" << endl;
	}
	virtual void Operation2() {
		cout << "ConcreteProduct2:操作2" << endl;
	}
};

class Creator
{
public:
	void Operation1()
	{
		Product* pProduct = FactoryMethod();
		pProduct->Operation1();
		delete pProduct;
	}
	void Operation2()
	{
		Product* pProduct = FactoryMethod();
		pProduct->Operation2();
		delete pProduct;
	}
public:
	virtual Product* FactoryMethod() = 0;
};

class ConcreteCreator1 : public Creator
{
public:
	virtual Product* FactoryMethod() {
		return new ConcreteProduct1;
	}

};
class ConcreteCreator2 : public Creator
{
public:
	virtual Product* FactoryMethod() {
		return new ConcreteProduct2;
	}

};
#include "Creator.h"
int main() {

	Creator* pCreator = new ConcreteCreator1;
	Product* pProduct = pCreator->FactoryMethod();
	pProduct->Operation1();
	pProduct->Operation2();
	
	delete pProduct;
	delete pCreator;

	pCreator = new ConcreteCreator2;
	pCreator->Operation1();
	pCreator->Operation2();

	delete pCreator;
	return 0;
}

运行结果:

6.1 可以直接操作Product的接口(3.1),也可以通过Creator操作

6.2 增加ConcreteProduct3,需要增加对应的ConcreteCreator3(4.1)

相关推荐

  1. GO设计模式——2工厂方法模式创建型)

    2023-12-14 05:18:03       38 阅读
  2. Spring设计模式工厂模式创建Bean对象

    2023-12-14 05:18:03       28 阅读
  3. 设计模式-创建模式-工厂方法模式

    2023-12-14 05:18:03       31 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-14 05:18:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-14 05:18:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-14 05:18:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-14 05:18:03       20 阅读

热门阅读

  1. 【前端设计模式】之桥接模式

    2023-12-14 05:18:03       43 阅读
  2. python爬虫数据可视化

    2023-12-14 05:18:03       40 阅读
  3. 物联网架构之 Hadoop

    2023-12-14 05:18:03       32 阅读
  4. 力扣刷题笔记——进制高低位储存数据

    2023-12-14 05:18:03       42 阅读
  5. 基于Hadoop的电商数据分析系统设计与实现

    2023-12-14 05:18:03       28 阅读