【设计模式】喝一杯果汁,学会简单工厂模式
本文主要通过榨汁机和果汁的例子,讲解简单工厂模式及其Python代码实现。
文章目录
- 工厂模式设计思想
- 简单工厂模式的代码实现
- 小结
工厂模式设计思想
在日常生活中,我们通过榨汁机榨汁,加入不同的水果就产生不同的果汁,例如苹果汁,橙汁等。这一过程就如同一个工厂一样,我们加入不同的原料,就会生产出不同的产品,这就是程序设计中工厂模式的概念。
工厂模式中有两个最基础的概念:
- 工厂类:专门负责创建其他类的实例,根据参数的不同创建不同类的实例(当然,符合此概念的也可以是一个静态方法),例子中的榨汁机就是一个工厂类。
- 产品类:被工厂类创建的对象的类称为产品类,例子中的苹果汁,橙汁都是产品类。
简单工厂模式的代码实现
了解了简单工厂模式的设计思想,接下来我们使用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)简单工厂模式、策略模式
1.简单工厂模式 用一个单独的类来做创造实例的过程. public class OperationFactory{ public static Operation createOperate(stri ...
- 设计模式之简单工厂模式(Simply Factory)摘录
从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种 ...
- 设计模式之简单工厂模式(静态工厂方法)
模式定义: 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一. 简单工厂模式是由一个工厂对象 ...
- 设计模式学习笔记二:简单工厂模式
含义: 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创 ...
- 解读设计模式----简单工厂模式(SimpleFactory Pattern),你要什么我就给你什么
本文首发于博客园,地址:http://www.cnblogs.com/beniao/archive/2008/08/09/1263318.html 一.模式概述 从设计模式的类型上来说,简单工厂模式是 ...
- 设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)...
转自:http://www.cnblogs.com/stonehat/archive/2012/04/16/2451891.html 设计模式系列--三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂 ...
- 23种设计模式 -----Day01:简单工厂模式
目录 前言 1.设计模式(Design pattern)定义 2.为什么要使用设计模式(使用设计模式的意义) 3.设计原则 a.单一职责原则 b.开放封闭原则 c.里氏代换原则 d.迪米特法则 e.依 ...
- 简单工厂模式-接口在设计模式中的应用之一
接口在设计模式中的应用之一:简单工厂模式 无工厂:手工 缺点:麻烦,对每一个的要求都比较高 优点:个性化 工厂:生产产品 优点:批量生产,使用者比较方便,直接买 缺点:无法定制,如果非要定制就会比较麻 ...
- 工厂模式--简单工厂模式--抽象工厂模式
工厂模式 作用:实现创建者与调用者的分离 简单工厂模式.工厂方法模式.抽象工厂模式,都是属于创建型设计模式.严格上来说,简单工厂模式不属于23设计模式之一,因为它违背了开闭原则. ========== ...
最新文章
- Android - TextureView, SurfaceView和GLSurfaceView 以及 SurfaceTexture
- TSQL批处理插入一万条记录-随机生成某些字段值
- 曾几何时,我们炼的不是丹,是特征
- IT人员加班处于恐惧之中
- Tomcat5.5报错:Apache Portable Runtime was not found
- android 中如何模拟back键
- 计算机系统操作技师考试题,机关事业单位技术工人计算机操作技师考试题库
- python 会议室预约系统解决方案_会议预约系统_智能会议预约管理系统_轻松实现会议管理解决方案...
- Ubuntu20.04更换软件源
- linux主机名hostname老是被更改为broad原理分析和恢复
- 终于!LeCun发文驳斥Gary Marcus:别把深度学习暂时的困难当撞墙
- HTTP协议网络请求状态码
- php strpos注意问题坑,php小白容易出现的 strpos 逻辑错误
- 三毛经典人生励志语录
- Hibernate的搭建
- layui实现报表数据
- slam入门——十四讲笔记(一)
- 金一文化推出“B站2233 x中央芭蕾舞团”限量手办
- 图形图像文件格式分类
- 支付宝要用补贴为生活服务铺路,这个“东风”商家们借不借?