1、意图

定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到子类。

2、适用性

(1)当一个类不知道它所必须创建的对象的类的时候

(2)当一个类希望由它的子类来指定它所创建的对象的时候。

(3)当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。

3、结构

UML类图表示为

4、参与者

Product:定义工厂方法所创建的对象的接口

ConcreteProduct:实现 Product接口

Creator:声明工厂,该方法返回一个Product类型的对象;可以调用工厂方法创建一个Product对象

ConcreteCreator:重定义工厂方法返回一个Concrete实例对象。

5、协作

Creator依赖于它的子类来定义工厂方法,所以它返回一个适当的ConcreteProduct实例。

其序列图表示为

6、效果

工厂方法不再将与特定应用有关的类绑定到你的代码中,仅处理Product接口。

缺点是仅仅为了创建一个特定的ConcreteProduct对象,就要创建ConcreteCreator子类。

c++样例代码

#include <iostream>
#include <string>
#include <memory>using namespace std;enum class ProductType
{PRODUCT1,PRODUCT2
};class Product
{
public:virtual void method() = 0;
};class Product1 : public Product
{
public:void method() {cout << "Product1:method()" << endl;}
};class Product2 : public Product
{
public:void method() {cout << "Product2:method()" << endl;}
};class Creator
{
protected:virtual unique_ptr<Product> factoryMethod(ProductType type) = 0;
public:void opration(){ProductType productType[] = {ProductType::PRODUCT1, ProductType::PRODUCT2};for (auto x : productType) {unique_ptr<Product> product = factoryMethod(x);product->method();}}
};class ConcreteCreator : public Creator
{
public:unique_ptr<Product> factoryMethod(ProductType type){unique_ptr<Product> ret(nullptr);switch (type) {case ProductType::PRODUCT1:ret.reset(new Product1);break;case ProductType::PRODUCT2:ret.reset(new Product2);break;default:break;}return ret;}
};int main()
{ConcreteCreator cr;cr.opration();return 0;
}

创建型模式之FactoryMethod相关推荐

  1. 设计模式——创建型模式

    创建型模式抽象了实例化过程,他们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,一个对象创建模式将实例化委托给另一个对象. 1. Factory Meth ...

  2. java创建型_Java创建型模式

    Java创建型模式 在软件工程中,创建型模式是处理对象创建的设计模式,试图根据实际情况使用合适的方式创建对象.基本的对象创建方式可能会导致设计上的问题,或增加设计的复杂度.创建型模式通过以某种方式控制 ...

  3. Java创建型模式的讨论

    2019独角兽企业重金招聘Python工程师标准>>> 创建型模式抽象了实例化过程.它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类, ...

  4. GoF的23种设计模式之创建型模式的特点和分类

    创建型模式的主要关注点是"怎样创建对象?",它的主要特点是"将对象的创建与使用分离".这样可以降低系统的耦合度,使用者不需要关注对象的创建细节,对象的创建由相关 ...

  5. 创建型模式学习总结——设计模式学习笔记

    一 创建型模式 1 创建型模式抽象了实例化的过程 将对象的创建,组合,表示独立于系统.一个类创建型模式使用继承来改变被实例化的对象, 一个对象的创建型模式是将实例化委托给另一个对象,以避免硬编码(ha ...

  6. 设计模式之六个创建型模式的相关知识,简单易懂。

    一. 简单工厂模式-Simple Factory Pattern 1) 工厂三兄弟之简单工厂模式(一) 工厂模式是最常用的一类创建型设计模式,通常我们所说的工厂模式是指工厂方法模式,它也是使用频率最高 ...

  7. 设计模式(二)—— 创建型模式

    设计模式(二)-- 创建型模式 文章首发于 掘金 作者:MiyueFE 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 创建型模式,即处理对象创建过程的设计模式,根据实际情况来使 ...

  8. 设计模式-创建型模式(单例、简工、工方)

    1.单例模式 确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法.单例模式是一种对象创建模式. 1.1 饿汉式单例类 当类被加载时,静态变量inst ...

  9. 软件设计模式--第二章 创建型模式--建造者模式

    目录 第二章 创建型模式 1.创建型模式概述 2.建造者模式 (1)模式的定义与特点 (2)模式的结构与实现 (3)应用场景 (4)扩展 第二章 创建型模式 1.创建型模式概述 主要特点 将对象的创建 ...

最新文章

  1. 零基础如何选择适合的Java培训课程
  2. 【每周CV论文】深度学习图像降噪应该从阅读哪些文章开始
  3. 在 Lua 里 使用 Cocos Studio 导出的 .csb 文件
  4. 虚拟主机搭建微信公众号服务器,建web服务器同时如何搭建虚拟主机?方法有几种?...
  5. windows平台下基于QT和OpenCV搭建图像处理平台
  6. Python 各种应用收集
  7. 手把手带你玩转Tensorflow 物体检测 API (2)——数据准备
  8. java的IO知识梳理
  9. linux中安装,编译时调用,运行时调用,更新共享库
  10. Linux离线安装rzsz
  11. 网页版 html5 斗地主,HTML5版单机斗地主
  12. extjs ueditor 图片_Ext整合ueditor示例
  13. Nodejs 获取本机IP地址
  14. 半监督3D医学图像分割(一):Mean Teacher
  15. python如何打开txt文件、并算词频_python读取word文本进行词频统计
  16. TAPD项目管理:工作流自动化最佳实践
  17. 京东产品上架如何批量上传商品素材?
  18. 美国顶尖大学特别的感恩节传统……
  19. 支付宝自动续费申请PHP,APP是如何实现自动续费的?
  20. 网页三剑客,html/css/javascript

热门文章

  1. python课程推荐-课程推荐:四天人工智能 python入门体验课
  2. 用python绘制柱状图标题-零基础用 Python 画图表,让你的论文高一个逼格
  3. python绘制动态模拟图-Python 模拟生成动态产生验证码图片的方法
  4. python是中国的吗-使用Python实现画一个中国地图
  5. python做啥用-你都用 Python 来做什么?
  6. python手机版下载3.7.3-Python 3.7.0 来了!
  7. python爬虫代码1000行-最精简的爬虫 --仅需4行代码(python)
  8. python好学嘛-python语言好学吗
  9. python菜鸟工具-终于清楚python菜鸟入门教程
  10. python绘制雷达图-使用Python绘制雷达图