1. 工厂方法模式(FactoryMethod)介绍

UML类图

工厂模式

工厂模式根据抽象程度的不同分为三种:简单工厂模式(也叫静态工厂模式)、本文所讲述的工厂方法模式、以及抽象工厂模式。工厂模式是编程中经常用到的一种模式。它的主要优点有:

  • 可以使代码结构清晰,有效地封装变化。在编程中,产品类的实例化有时候是比较复杂和多变的,通过工厂模式,将产品的实例化封装起来,使得调用者根本无需关心产品的实例化过程,只需依赖工厂即可得到自己想要的产品。
  • 对调用者屏蔽具体的产品类。如果使用工厂模式,调用者只关心产品的接口就可以了,至于具体的实现,调用者根本无需关心。即使变更了具体的实现,对调用者来说没有任何影响。
  • 降低耦合度。产品类的实例化通常来说是很复杂的,它需要依赖很多的类,而这些类对于调用者来说根本无需知道,如果使用了工厂方法,我们需要做的仅仅是实例化好产品类,然后交给调用者使用。对调用者来说,产品所依赖的类都是透明的。

工厂方法模式

通过工厂方法模式的类图可以看到,工厂方法模式有四个要素:

  • 工厂接口。工厂接口是工厂方法模式的核心,与调用者直接交互用来提供产品。在实际编程中,有时候也会使用一个抽象类来作为与调用者交互的接口,其本质上是一样的。
  • 工厂实现。在编程中,工厂实现决定如何实例化产品,是实现扩展的途径,需要有多少种产品,就需要有多少个具体的工厂实现。
  • 产品接口。产品接口的主要目的是定义产品的规范,所有的产品实现都必须遵循产品接口定义的规范。产品接口是调用者最为关心的,产品接口定义的优劣直接决定了调用者代码的稳定性。同样,产品接口也可以用抽象类来代替,但要注意最好不要违反里氏替换原则。
  • 产品实现。实现产品接口的具体类,决定了产品在客户端中的具体行为。

2. 示例

#!/usr/bin/env python3
# -*- coding: utf-8 -*-'''Factory Pattern with Python Code
'''from abc import abstractmethod, ABCMeta# 工厂接口。工厂接口是工厂方法模式的核心,与调用者直接交互用来提供产品
class IProduct(metaclass=ABCMeta):@abstractmethoddef productMethod(self):pass# 工厂实现。在编程中,工厂实现决定如何实例化产品,是实现扩展的途径
class Product(IProduct):def productMethod(self):print("create product")# 产品接口。产品接口的主要目的是定义产品的规范
class IFactory(metaclass=ABCMeta):@abstractmethoddef createProduct(self):pass# 产品实现。实现产品接口的具体类,决定了产品在客户端中的具体行为
class Factory(IFactory):def createProduct(self):return Product()class Client(object):def main(self):factory = Factory()product = factory.createProduct()product.productMethod()if __name__ == "__main__":Client().main()

输出:

# ./FactoryMethod.py
create product

参考:
https://wiki.jikexueyuan.com/project/java-design-pattern/factory-pattern.html

python设计模式2-工厂方法模式相关推荐

  1. python类是实例的工厂_Python设计模式之工厂方法模式实例详解

    本文实例讲述了Python设计模式之工厂方法模式.分享给大家供大家参考,具体如下: 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类, ...

  2. 设计模式复习-工厂方法模式

     设计模式复习-工厂方法模式 相对于简单工厂,工厂方法是把算法类的实例化延迟到了调用者那去做,调用者根据自己的需要,自己实例化相关的工厂并且生产相关算法.这么做是因为简单工厂是不满足OCP的,因为如果 ...

  3. C#设计模式(3)——工厂方法模式

    一.引言 在简单工厂模式中讲到简单工厂模式的缺点,有一点是--简单工厂模式系统难以扩展,一旦添加新产品就不得不修改简单工厂方法,这样就会造成简单工厂的实现逻辑过于复杂,然而本专题介绍的工厂方法模式可以 ...

  4. 设计模式之工厂方法模式(创建型)

    一.模式定义 工厂方法模式:又称工厂模式,也叫虚拟构造器模式,属于构建型设计模式,工厂方法模式是在简单工厂模式上进行拓展,生产产品的过程由具体工厂类实现,基类只实现接口,这使得工厂方法模式可以在不修改 ...

  5. 设计模式之工厂方法模式应用例题

    设计模式之工厂方法模式应用例题 题目描述 类结构图及相关说明 程序代码 运行结果 题目描述 现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器(ImageReade ...

  6. 设计模式:工厂方法模式(Factory method)

    设计模式:工厂方法模式(Factory method) 一.问题 在前一章中通过披萨的实例介绍了简单工厂模式.在披萨实例中,如果我想根据地域的不同生产出不同口味的披萨,如纽约口味披萨,芝加哥口味披萨. ...

  7. 【设计模式】工厂方法模式(C#)

    [设计模式]工厂方法模式 1.概述 针对简单工厂中的缺点,使用工厂方法模式就可以完美的解决,完全遵循开闭原则. 定义一个用于创建对象的接口,让子类决定实例化哪个产品类对象.工厂方法使一个产品类的实例化 ...

  8. 一文叫你弄懂Java设计模式之工厂方法模式:图解+日志记录器代码实例

    文章目录 详解Java设计模式之工厂方法模式 案例引入工厂方法模式 工厂方法模式 定义 案例分析 UML类图分析 代码分析 工厂方法的重载 工厂方法的隐藏 模式优点 模式缺点 模式适用环境 详解Jav ...

  9. Java设计模式之工厂方法模式与抽象工厂模式

    2019独角兽企业重金招聘Python工程师标准>>> 一.前期回顾 上一篇<Java设计模式之单例模式>详细介绍了单例模式,介绍了单例模式的使用场景,优缺点,同时也写了 ...

  10. 简单工厂模式(Java、Python)、工厂方法模式(Java、Python)

    目录 一.试画出简单工厂模式的模式结构图,并对模式进行分析 1.1 简单工厂模式结构图: 1.2 简单工厂模式的实现(Java) 1.3 简单工厂模式的优缺点 1.4 简单工厂模式实现(Python) ...

最新文章

  1. Selenium支持高版本的FireFox
  2. 一个关于nvarchar字段排序,中英文混合排序的问题
  3. MySQL无法存储中文问题
  4. Python语言学习之数值、小数、空格那些事:python和数值、小数、空格的使用方法之详细攻略
  5. C++ cin.putback()输入【已知行数】但【未知每行数字个数】的思路
  6. sql开启mysql远程连接_CentOS系统中安装MySQL和开启MySQL远程访问的方法
  7. ast.literal_eval(转)
  8. 【Linux 命令】云服务器 ECS (CentOS) 开启防火墙操作
  9. Exchange Server 2010 SP3部署
  10. 2021-2025年中国磁弹性扭矩传感器行业市场供需与战略研究报告
  11. [记]创建常量、原子性的值类型
  12. Visual Assist X V10.7.1929.0 官方原版+破解补丁+破解方法
  13. 一个浏览图片新闻的App
  14. ora 01033 oracle initialization,ora-01033:oracle initialization or shutdown in progress 解决方法
  15. 由一道CTF pwn题深入理解libc2.26中的tcache机制
  16. 【JavaScript】小数点精度问题,小数点后两位toFixed(),把四舍六入五凑偶,修改成四舍五入
  17. linux下常用alias
  18. 华师大 OJ 3037
  19. 数字集成电路设计考试概念总结
  20. 百度网盘不能绑定QQ

热门文章

  1. 体系结构方案 -ETL 中间件
  2. session对象的使用
  3. 设计模式实践系列 (3) - 装饰模式 ( Decorator )
  4. 《Python分布式计算》 第8章 继续学习 (Distributed Computing with Python)
  5. 什么样的网站建设公司才是值得信赖的?
  6. UML学习笔记(六)【状态图】
  7. 黑马程序员-Java-面向对象篇上《二》
  8. 感恩节快乐,PM2小窍门致NodeJS开发者!
  9. 小隐隐于野:基于TCP反射DDoS攻击分析
  10. 爱上MVC~业务层刻意抛出异常,全局异常的捕获它并按格式返回