博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式:工厂方法模式
阅读量:2346 次
发布时间:2019-05-10

本文共 679 字,大约阅读时间需要 2 分钟。

 

目录


工厂方法模式

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

工厂方法模式类图

  • 抽象产品(Product):抽象类或者接口,负责规定产品的规范。
  • 具体产品(ConcreteProduct):具体产品类,实现抽象产品的规范。
  • 构造者(Creator):抽象类或者接口,定义一个抽象的生产方法,由子类负责具体实现。
  • 具体构造者(ConcreteCreator):具体构造者,实现构造者方法,生成具体产品。(具体产品会被上转型为抽象类型的对象)

工厂方法的优点

  1. 使用工厂方法可以让用户的代码和某个特定类的子类的代码解耦。(构造者与具体产品不接触,用户代码不需要引入ConcreteProduct类)
  2. 工厂方法使用户不必知道它所使用的对象是怎样被创建的,只需要知道该对象有哪些方法即可。(用户只需要知道产品Product的使用方式,不需要知道产品的创建过程。司机会开车就行,不需要知道汽车是如何建造的

工厂方法的使用情景

  • 用户需要一个类的子类的实例,但不希望与该类的子类形成耦合。
  • 用户需要一个类的子类的实例,但不知道该类有哪些子类可用。

JDK相关的工厂方法实现举例

  • 抽象产品(Iterator):抽象类或者接口,负责规定产品的规范。
  • 具体产品():由LinkedList、HashSet构造的,实现Iterator接口的内部类。
  • 构造者(Collection):集合接口,定义了iterator方法,由具体类实现。
  • 具体构造者(LinkedList、HashSet):具体集合,返回具体的Iterator实现。

 

 

 

转载地址:http://pfsvb.baihongyu.com/

你可能感兴趣的文章
maplab(1):安装
查看>>
陀螺仪随机误差的Allan方差分析
查看>>
Ubuntu 64位安装Adobe Reader 9.5.5
查看>>
Ubuntu 下如何查看已安装的软件
查看>>
Linux 系统下可以注释标注的pdf阅读器安装、比较和推荐
查看>>
福昕阅读器foxit reader Linux版
查看>>
Ubuntu 安装百度云客户端
查看>>
每天一个linux命令:locate
查看>>
Linux 环境下载百度云资源,Firefox插件(百度网盘助手)
查看>>
ubuntu Firefox/chrome adobe flash 插件安装
查看>>
OpenCV图像变换(仿射变换与透视变换)
查看>>
仿射变换与透视变换
查看>>
Ubuntu 16.04 上安装 CUDA 9.0 详细教程
查看>>
Verify You Have a CUDA-Capable GPU
查看>>
ROS中OpenCV的使用——人脸检测
查看>>
ROS学习笔记(1):在ROS中使用OpenCV进行简单的图象处理--原理篇
查看>>
ROS学习笔记(2):在ROS中使用OpenCV进行简单的图像处理---代码实现篇
查看>>
C语言中声明和定义详解
查看>>
ros代码中添加使用opencv库,cv::Mat和ros image之间的相互转换
查看>>
ROS 不能再详细的安装教程
查看>>