第3章 工厂模式:建立创建对象的工厂
在上一章中,你已经了解了什么是单例设计模式,以及如何通过Python实现该设计模式并将其应用到现实世界中。我们知道,单例设计模式是一种创建型设计模式。在这一章中,我们继续学习另一种创建型模式,即工厂模式。
工厂模式可以说是最常用的设计模式。在这一章中,我们将了解工厂的概念,并深入探讨简单工厂模式。然后,本章将通过UML图来介绍工厂方法模式和抽象工厂模式,了解现实世界的应用场景以及基于Python v3.5的实现。此外,我们还会对工厂方法和抽象工厂方法进行比较。
在本章中,我们将简要介绍以下主题:
- 了解简单工厂设计模式;
- 讨论工厂方法和抽象工厂方法及其差异;
- 利用Python代码实现真实场景;
- 讨论模式的优缺点并进行相应的比较。
3.1 了解工厂模式
在面向对象编程中,术语“工厂”表示一个负责创建其他类型对象的类。通常情况下,作为一个工厂的类有一个对象以及与它关联的多个方法。客户端使用某些参数调用此方法,之后,工厂会据此创建所需类型的对象,然后将它们返回给客户端。
所以,这里的问题实际上是,既然客户端可以直接创建对象,那为什么我们还需要一个工厂呢?答案在于,工厂具有下列优点。
- 松耦合,即对象的创建可以独立于类的实现。
- 客户端无需了解创建对象的类,但是照样可以使用它来创建对象。它只需要知道需要传递的接口、方法和参数,就能够创建所需类型的对象了。这简化了客户端的实现。
- 可以轻松地在工厂中添加其他类来创建其他类型的对象,而这无需更改客户端代码。最简单的情况下,客户端只需要传递另一个参数就可以了。
- 工厂还可以重用现有对象。但是,如果客户端直接创建对象的话,总是创建一个新对象。
让我们探讨制造玩具车或玩偶的公司的情况。假设公司里的一台机器目前正在制造玩具车。后来,公司的CEO认为,迫切需要根据市场的需求来制造玩偶。这时,工厂模式就派上用场了。在这种情况下,机器成为接口,CEO是客户端。CEO只关心要制造的对象(或玩具)和创建对象的接口——机器。 ...
Get Python设计模式(第2版) now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.