精通Python设计模式(第2版)
上QQ阅读APP看书,第一时间看更新

第1章 工厂模式

设计模式是可复用的编程解决方案,在各种现实场景中被广泛使用,并且已被证实能够产生预期的结果。它们在程序员中广为流传,并与时俱进。设计模式的流行得益于Erich Gamma、Richard Helm、Ralph Johnson与John Vlissides合著的《设计模式:可复用面向对象软件的基础》(后面简称《设计模式》)一书。

四人组这本由Erich Gamma、Richard Helm、Ralph Johnson与John Vlissides合著的书又被简称为“四人组”书(还有一种更简洁的形式——GoF书)。

以下是一段有关设计模式的描述,引自《设计模式》一书:

设计模式针对面向对象系统中重复出现的设计问题,提出一个通用的设计方案,并予以系统化的命名和动机解释。它描述问题,提出解决方案,指出何时适用此方案,并说明方案的效果。它同时也提供实现代码的提示与示例。该解决方案是用以解决该问题的一组通用的类和对象,经过定制和实现就可用来解决特定上下文中的问题。

面向对象编程中有多种设计模式可以使用,具体使用哪种,取决于问题类型或者解决方案类型。在《设计模式》中,“四人组”向我们呈现了23种设计模式,并分为3类:创建型结构型行为型

创建型设计模式是本书将要介绍的第一种类型。我们将通过本章、第2章和第3章来阐述。这些模式对应于对象创建过程的不同方面。它们的目的是在不便直接创建对象的时候(如在Python中使用__init__()函数),提供更好的替代方案。

查看https://docs.python.org/3/tutorial/classes.html以了解对象类和特殊的__init__()函数。Python用它们来创建新的类实例。

我们将从工厂设计模式入手,它是《设计模式》一书中的第一个创建型设计模式。在工厂模式中,客户端(意为调用后文所提及对象的代码)在不知道对象来源(即不知道该对象是用哪个类产生的)的情况下,要求创建一个对象。工厂模式背后的思想是简化对象的创建过程。与客户端直接使用类实例化来创建对象相比,使用一个中心函数来创建对象显然更容易追踪。通过将创建对象的代码与使用对象的代码解耦,工厂模式能够降低维护应用的复杂度。

工厂模式通常有两种形式:一种是工厂方法,它是一个方法(或以地道的Python术语来说,是一个函数),针对不同的输入参数返回不同的对象;另一种是抽象工厂,它是一组用于创建一系列相关对象的工厂方法。

本章将讨论:

❑ 工厂方法

❑ 抽象工厂