创建型模式之FactoryMethod
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. Factory Meth ...
- java创建型_Java创建型模式
Java创建型模式 在软件工程中,创建型模式是处理对象创建的设计模式,试图根据实际情况使用合适的方式创建对象.基本的对象创建方式可能会导致设计上的问题,或增加设计的复杂度.创建型模式通过以某种方式控制 ...
- Java创建型模式的讨论
2019独角兽企业重金招聘Python工程师标准>>> 创建型模式抽象了实例化过程.它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类, ...
- GoF的23种设计模式之创建型模式的特点和分类
创建型模式的主要关注点是"怎样创建对象?",它的主要特点是"将对象的创建与使用分离".这样可以降低系统的耦合度,使用者不需要关注对象的创建细节,对象的创建由相关 ...
- 创建型模式学习总结——设计模式学习笔记
一 创建型模式 1 创建型模式抽象了实例化的过程 将对象的创建,组合,表示独立于系统.一个类创建型模式使用继承来改变被实例化的对象, 一个对象的创建型模式是将实例化委托给另一个对象,以避免硬编码(ha ...
- 设计模式之六个创建型模式的相关知识,简单易懂。
一. 简单工厂模式-Simple Factory Pattern 1) 工厂三兄弟之简单工厂模式(一) 工厂模式是最常用的一类创建型设计模式,通常我们所说的工厂模式是指工厂方法模式,它也是使用频率最高 ...
- 设计模式(二)—— 创建型模式
设计模式(二)-- 创建型模式 文章首发于 掘金 作者:MiyueFE 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 创建型模式,即处理对象创建过程的设计模式,根据实际情况来使 ...
- 设计模式-创建型模式(单例、简工、工方)
1.单例模式 确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法.单例模式是一种对象创建模式. 1.1 饿汉式单例类 当类被加载时,静态变量inst ...
- 软件设计模式--第二章 创建型模式--建造者模式
目录 第二章 创建型模式 1.创建型模式概述 2.建造者模式 (1)模式的定义与特点 (2)模式的结构与实现 (3)应用场景 (4)扩展 第二章 创建型模式 1.创建型模式概述 主要特点 将对象的创建 ...
最新文章
- 零基础如何选择适合的Java培训课程
- 【每周CV论文】深度学习图像降噪应该从阅读哪些文章开始
- 在 Lua 里 使用 Cocos Studio 导出的 .csb 文件
- 虚拟主机搭建微信公众号服务器,建web服务器同时如何搭建虚拟主机?方法有几种?...
- windows平台下基于QT和OpenCV搭建图像处理平台
- Python 各种应用收集
- 手把手带你玩转Tensorflow 物体检测 API (2)——数据准备
- java的IO知识梳理
- linux中安装,编译时调用,运行时调用,更新共享库
- Linux离线安装rzsz
- 网页版 html5 斗地主,HTML5版单机斗地主
- extjs ueditor 图片_Ext整合ueditor示例
- Nodejs 获取本机IP地址
- 半监督3D医学图像分割(一):Mean Teacher
- python如何打开txt文件、并算词频_python读取word文本进行词频统计
- TAPD项目管理:工作流自动化最佳实践
- 京东产品上架如何批量上传商品素材?
- 美国顶尖大学特别的感恩节传统……
- 支付宝自动续费申请PHP,APP是如何实现自动续费的?
- 网页三剑客,html/css/javascript
热门文章
- python课程推荐-课程推荐:四天人工智能 python入门体验课
- 用python绘制柱状图标题-零基础用 Python 画图表,让你的论文高一个逼格
- python绘制动态模拟图-Python 模拟生成动态产生验证码图片的方法
- python是中国的吗-使用Python实现画一个中国地图
- python做啥用-你都用 Python 来做什么?
- python手机版下载3.7.3-Python 3.7.0 来了!
- python爬虫代码1000行-最精简的爬虫 --仅需4行代码(python)
- python好学嘛-python语言好学吗
- python菜鸟工具-终于清楚python菜鸟入门教程
- python绘制雷达图-使用Python绘制雷达图