本文主要通过榨汁机和果汁的例子,讲解简单工厂模式及其Python代码实现。

文章目录

  • 工厂模式设计思想
  • 简单工厂模式的代码实现
  • 小结

工厂模式设计思想

在日常生活中,我们通过榨汁机榨汁,加入不同的水果就产生不同的果汁,例如苹果汁,橙汁等。这一过程就如同一个工厂一样,我们加入不同的原料,就会生产出不同的产品,这就是程序设计中工厂模式的概念。

工厂模式中有两个最基础的概念:

  1. 工厂类:专门负责创建其他类的实例,根据参数的不同创建不同类的实例(当然,符合此概念的也可以是一个静态方法),例子中的榨汁机就是一个工厂类。
  2. 产品类:被工厂类创建的对象的类称为产品类,例子中的苹果汁,橙汁都是产品类。

简单工厂模式的代码实现

了解了简单工厂模式的设计思想,接下来我们使用Python对例子中讲解到概念进行实现。

首先,我们定义了一个产品类的抽象类:

# 引入 ABCMeta 和 abstractmethod来定义抽象类和抽象方法
from abc import ABCMeta, abstractmethodclass FruitJuice(metaclass=ABCMeta):"""果汁"""def __init__(self, name):self.__name = namedef get_name(self):return self.__name@abstractmethoddef get_juice(self):pass

可以看到这个果汁类除了 __init__ 方法之外,只定义了2个方法:

  • get_name: 用于返回参数name
  • get_juice: 这个方法用于获取“果汁”,但是没有实现任何功能,并且使用 @abstractmethod 装饰器进行装饰,这样的目的是保证其子类必须自己实现该方法。

接下来,我们分别定义“苹果汁”类和“橙汁”类:

class AppleJuice(FruitJuice):"""苹果汁"""def __init_(self, name):super().__init__(name)def get_juice(self):return "苹果汁"class OrangeJuice(FruitJuice):"""橙汁"""def __init_(self, name):super().__init__(name)def get_juice(self):return "橙汁"

可以看到这两个产品子类都自己实现了 get_juice 方法,返回了具体的果汁。

最后,我们需要定义产品类——“榨汁机”类:

class Juicer:"""榨汁机"""@staticmethoddef make_juice(fruit):if fruit == "苹果":fruit_juice = AppleJuice(fruit)elif fruit == "橙子":       fruit_juice = OrangeJuice(fruit)else:raise ValueError("不支持的参数: %s" % fruit)return fruit_juice

我们放入不同的“水果”给“榨汁机”,“榨汁机”就会实例化并返回相应的产品类,这就是“榨汁机”的作用。

下面我们简单测试一下代码。

放入苹果给榨汁机,榨汁机返回苹果汁:

放入橙子给榨汁机,榨汁机返回橙汁:

小结

以上就是最简单的工厂模式,所以称为简单工厂模式,而实际上工厂模式这种编程思想衍生出来了3个版本:

  1. 简单工厂模式
  2. 工厂方法模式
  3. 抽象工厂模式

本文只介绍了简单工厂模式,想要了解其他更为复杂的工厂模式的可以参考《人人都懂设计模式》-罗伟富。

【设计模式】喝一杯果汁,学会简单工厂模式相关推荐

  1. 设计模式 学习笔记(1)简单工厂模式、策略模式

    1.简单工厂模式 用一个单独的类来做创造实例的过程. public class OperationFactory{ public static Operation createOperate(stri ...

  2. 设计模式之简单工厂模式(Simply Factory)摘录

    从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种 ...

  3. 设计模式之简单工厂模式(静态工厂方法)

    模式定义: 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一. 简单工厂模式是由一个工厂对象 ...

  4. 设计模式学习笔记二:简单工厂模式

    含义: 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创 ...

  5. 解读设计模式----简单工厂模式(SimpleFactory Pattern),你要什么我就给你什么

    本文首发于博客园,地址:http://www.cnblogs.com/beniao/archive/2008/08/09/1263318.html 一.模式概述 从设计模式的类型上来说,简单工厂模式是 ...

  6. 设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)...

    转自:http://www.cnblogs.com/stonehat/archive/2012/04/16/2451891.html 设计模式系列--三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂 ...

  7. 23种设计模式 -----Day01:简单工厂模式

    目录 前言 1.设计模式(Design pattern)定义 2.为什么要使用设计模式(使用设计模式的意义) 3.设计原则 a.单一职责原则 b.开放封闭原则 c.里氏代换原则 d.迪米特法则 e.依 ...

  8. 简单工厂模式-接口在设计模式中的应用之一

    接口在设计模式中的应用之一:简单工厂模式 无工厂:手工 缺点:麻烦,对每一个的要求都比较高 优点:个性化 工厂:生产产品 优点:批量生产,使用者比较方便,直接买 缺点:无法定制,如果非要定制就会比较麻 ...

  9. 工厂模式--简单工厂模式--抽象工厂模式

    工厂模式 作用:实现创建者与调用者的分离 简单工厂模式.工厂方法模式.抽象工厂模式,都是属于创建型设计模式.严格上来说,简单工厂模式不属于23设计模式之一,因为它违背了开闭原则. ========== ...

最新文章

  1. Android - TextureView, SurfaceView和GLSurfaceView 以及 SurfaceTexture
  2. TSQL批处理插入一万条记录-随机生成某些字段值
  3. 曾几何时,我们炼的不是丹,是特征
  4. IT人员加班处于恐惧之中
  5. Tomcat5.5报错:Apache Portable Runtime was not found
  6. android 中如何模拟back键
  7. 计算机系统操作技师考试题,机关事业单位技术工人计算机操作技师考试题库
  8. python 会议室预约系统解决方案_会议预约系统_智能会议预约管理系统_轻松实现会议管理解决方案...
  9. Ubuntu20.04更换软件源
  10. linux主机名hostname老是被更改为broad原理分析和恢复
  11. 终于!LeCun发文驳斥Gary Marcus:别把深度学习暂时的困难当撞墙
  12. HTTP协议网络请求状态码
  13. php strpos注意问题坑,php小白容易出现的 strpos 逻辑错误
  14. 三毛经典人生励志语录
  15. Hibernate的搭建
  16. layui实现报表数据
  17. slam入门——十四讲笔记(一)
  18. 金一文化推出“B站2233 x中央芭蕾舞团”限量手办
  19. 图形图像文件格式分类
  20. 支付宝要用补贴为生活服务铺路,这个“东风”商家们借不借?

热门文章

  1. 想让字体更有吸引力?来学下字体设计的断舍离!
  2. 华为鸿蒙手机什么时候出售,鸿蒙手机时间表,华为正式表态!还有两款麒麟9000旗舰新机在路上...
  3. 如何在PowerPoint中弯曲文本
  4. 每次打开都会变化的背景图
  5. 食饮品牌如何用Social Power抓住消费者心智?
  6. shell 数组元素有空格_Shell数组:Shell数组定义以及获取数组元素
  7. 2020校招指南(找工作的可以看看)
  8. 良心安利教师节海报设计模板素材网站
  9. linux查看usb硬件_使用USB记忆棒测试Linux硬件兼容性
  10. Unity3D之太空大战二