Python设计模式之工厂方法模式实例详解

Python设计模式之工厂方法模式实例详解

什么是工厂方法模式?

工厂方法模式是一种创建型设计模式,它定义了一种用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模式使一个类的实例化延迟到其子类。

工厂方法模式的优点有哪些?

  1. 保持了良好的封装性,让客户端不需要知道具体的产品类,只需要知道工厂类即可。
  2. 简化了系统的扩展性,客户端只需要知道新的具体产品类名即可,无须修改原有系统。

工厂方法模式的实现方法

在Python中,可以通过手写类的方式来实现工厂方法模式。

下面是一个简单的例子:

class Pizza:
    def __init__(self, name):
        self.name = name

    def prepare(self):
        pass

    def bake(self):
        pass

    def cut(self):
        pass

    def box(self):
        pass

class CheesePizza(Pizza):
    def prepare(self):
        print('Cheese Pizza prepared.')

class PepperoniPizza(Pizza):
    def prepare(self):
        print('Pepperoni Pizza prepared.')

class PizzaStore:
    def order_pizza(self, type):
        pizza = self.create_pizza(type)
        pizza.prepare()
        pizza.bake()
        pizza.cut()
        pizza.box()

    def create_pizza(self, type):
        pass

class NYPizzaStore(PizzaStore):
    def create_pizza(self, type):
        if type == 'cheese':
            return CheesePizza('NY Style Cheese Pizza')
        elif type == 'pepperoni':
            return PepperoniPizza('NY Style Pepperoni Pizza')

class ChicagoPizzaStore(PizzaStore):
    def create_pizza(self, type):
        if type == 'cheese':
            return CheesePizza('Chicago Style Cheese Pizza')
        elif type == 'pepperoni':
            return PepperoniPizza('Chicago Style Pepperoni Pizza')

上面的代码中,Pizza是一个抽象基类,定义了披萨的名称、准备、烘烤、切割和包装方法。CheesePizzaPepperoniPizza是具体的披萨类,继承了Pizza并重写了prepare方法来完成具体的制作过程。PizzaStore是一个抽象工厂类,定义了制作披萨的顺序,提供一个抽象方法来创建披萨。NYPizzaStoreChicagoPizzaStore是具体的工厂类,继承了PizzaStore并实现了create_pizza方法,根据不同的输入类型创建不同的披萨。

这里我们来看看如何使用工厂方法模式来制作披萨。

ny_store = NYPizzaStore()
chicago_store = ChicagoPizzaStore()

ny_store.order_pizza('cheese')
chicago_store.order_pizza('pepperoni')

输出结果为

Cheese Pizza prepared.
Pepperoni Pizza prepared.

工厂方法模式的注意事项

  1. 不要滥用工厂方法模式,有时候使用工厂方法模式会带来过度的复杂性。
  2. 工厂方法模式通常会被用来代替类的直接实例化处理。
  3. 工厂方法模式在一些框架中被广泛应用,例如Django ORM框架使用工厂方法模式来创建数据库查询对象。

总结

工厂方法模式是一种创建型设计模式,主要应用于创建具有相同属性的一系列对象。通过将对象的创建和使用分开,可以方便地进行扩展和维护。

在Python中,我们可以使用类来实现工厂方法模式。通过定义抽象基类和具体类,以及抽象工厂类和具体工厂类,可以方便地创建不同类型的对象。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python设计模式之工厂方法模式实例详解 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Android Studio 创建自定义控件的方法

    下面是详细的讲解“Android Studio 创建自定义控件的方法”的完整攻略。 1. 创建布局文件 首先,我们需要在res/layout目录下创建一个xml文件,并在里面添加我们自定义控件的布局。 例如,我们要创建一个自定义的Button控件,可以在布局文件中添加如下代码: <?xml version="1.0" encodin…

    other 2023年6月26日
    00
  • 数据加密第五篇:非对称密钥

    以下是关于“数据加密第五篇:非对称密钥”的完整攻略,包括定义、方法、示例说明和注意事项。 定义 非对称密钥加密(Asymmetric Key Encryption)是一种加密方式,使用一对密钥(公钥和私钥)来加密和解密数据。公钥可以公开,任何人都可以使用公钥加密数据,但只有私钥的持有者才能解密数据。非对称密钥加密通常用于安全通信和数字签名。 方法 以下是非对…

    other 2023年5月8日
    00
  • Android activity堆栈及管理实例详解

    Android Activity堆栈及管理实例详解 在Android开发中,Activity是应用程序的基本组件之一,用于展示用户界面和处理用户交互。Activity堆栈是指存储Activity实例的一种数据结构,用于管理Activity的生命周期和导航。 Activity堆栈的工作原理 Activity堆栈采用后进先出(LIFO)的原则,即最后一个进入堆栈…

    other 2023年8月26日
    00
  • go语言实现http服务端与客户端的例子

    Go语言实现HTTP服务端与客户端的例子 HTTP服务端 在Go语言中实现HTTP服务端可以使用内置的net/http包,这个包提供了HTTP协议的标准实现,可以用来实现HTTP服务端和客户端。 下面是一个简单的例子,演示了如何使用net/http包创建HTTP服务端并对收到的请求进行响应。 package main import ( "fmt&q…

    other 2023年6月25日
    00
  • mongodb的批量查询条件进行批量更新数据

    以下是“MongoDB的批量查询条件进行批量更新数据”的完整攻略: MongoDB的批量查询条件进行批量更新数据 在MongoDB中,您可以使用updateMany”函数批量更新符合条件的文档。以下是使用MongoDB进行批量更新的步骤: 准备查询条件。 在批更新之前,您需要准备一个查询条件。以下是一个示例: javascript var query = {…

    other 2023年5月7日
    00
  • Android编程之基于Log演示一个activity生命周期实例详解

    让我来向你详细讲解一下“Android编程之基于Log演示一个activity生命周期实例详解”的完整攻略。 什么是Android中的生命周期? 在Android应用程序中,Activity生命周期指的是从Activity的创建(或从新创建)到销毁的整个过程。整个过程包括了Activity的启动、暂停、停止甚至是销毁等一系列的生命周期事件。在每个生命周期事件…

    other 2023年6月27日
    00
  • MySQL常见建表选项及约束

    MySQL常见建表选项及约束 在MySQL中,创建表时可以使用各种选项和约束,以确保数据的正确性和完整性。下面介绍一些常见的选项和约束: 数据类型 在创建表时,需要指定存储在列中的数据类型。常用的数据类型如下: INT: 整数。可以指定长度,如INT(10)。长度指定了显示的宽度,但不影响存储。INT的长度默认为11。 FLOAT和DOUBLE: 浮点数。F…

    其他 2023年3月28日
    00
  • 听说看了这篇文章就彻底搞懂了什么是OPC(上)

    OPC(OLE for Process Control)是一种用于工业自动化的通信协议,它允许不同的设备和系统之间进行数据交换和通信。在本文中,我们将详细介绍OPC的概念、架构、通信方式和应用场景,并提供两个示例说明。 OPC的概念 OPC是一种用于工业自动化的通信协议,它允许不同的设备和系统之间进行数据交换和通信。OPC协议的主要目的是提供一种标准化的接口…

    other 2023年5月5日
    00
合作推广
合作推广
分享本页
返回顶部