python 设计模式

简介: 工厂模式是一种创建型设计模式,通过定义创建对象的接口,将实例化延迟到子类,实现对象创建与使用的分离。它包括简单工厂模式、工厂方法模式和抽象工厂模式,适用于不同复杂度的对象创建场景,提高系统灵活性和可扩展性。

一、工厂模式概述

(一)定义

工厂模式是一种创建型设计模式。它的核心思想是定义一个创建对象的接口(可以是抽象类或者接口),让子类决定实例化哪一个类。工厂方法把实例化推迟到子类,这样就可以将对象的创建和使用分离,从而提高系统的灵活性和可扩展性。

(二)分类

  1. 简单工厂模式
  • 这种模式不是严格的设计模式,但它为工厂模式奠定了基础。它由一个工厂类来决定创建哪一种产品类的实例。简单工厂模式的结构相对简单,它包含一个工厂类和多个产品类。
  • 例如,假设我们要创建不同类型的图形对象,如圆形、矩形等。简单工厂模式下,有一个图形工厂类,根据传入的参数(如“circle”表示圆形,“rectangle”表示矩形)来创建对应的图形对象。
  1. 工厂方法模式
  • 工厂方法模式是简单工厂模式的升级。它引入了抽象工厂类,这个抽象工厂类声明了一个工厂方法,用于创建产品对象。具体的子类工厂继承抽象工厂类,并实现工厂方法来创建具体的产品对象。
  • 以汽车制造为例,有一个抽象的汽车工厂类,它有一个工厂方法用于创建汽车。然后有具体的工厂类,如宝马工厂和奔驰工厂,它们继承抽象工厂类。宝马工厂的工厂方法创建宝马汽车对象,奔驰工厂的工厂方法创建奔驰汽车对象。
  1. 抽象工厂模式
  • 抽象工厂模式是最复杂的工厂模式。它提供了一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。这种模式适用于产品族和产品等级结构都比较复杂的情况。
  • 比如,一个电子产品公司生产手机和电脑两种产品,而且有高端和低端两种产品等级。抽象工厂模式下,有一个抽象工厂接口,用于创建手机和电脑。然后有高端产品工厂和低端产品工厂,高端产品工厂创建高端手机和高端电脑,低端产品工厂创建低端手机和低端电脑。

二、Python中实现工厂模式

(一)简单工厂模式

python

体验AI代码助手

代码解读

复制代码

# 定义产品接口
class Shape:
    def draw(self):
        pass

# 创建具体产品类
class Circle(Shape):
    def draw(self):
        print("Inside Circle::draw() method.")

class Rectangle(Shape):
    def draw(self):
        print("Inside Rectangle::draw() method.")

# 创建工厂类
class ShapeFactory:
    def get_shape(self, shape_type):
        if shape_type == None:
            return None
        if shape_type == "circle":
            return Circle()
        elif shape_type == "rectangle":
            return Rectangle()
        return None

# 使用
shape_factory = ShapeFactory()
shape1 = shape_factory.get_shape("circle")
shape1.draw()
shape2 = shape_factory.get_shape("rectangle")
shape2.draw()

在这个例子中,ShapeFactory类根据传入的shape_type参数来决定创建Circle还是Rectangle对象。

(二)工厂方法模式

python

体验AI代码助手

代码解读

复制代码

# 定义产品接口
class Shape:
    def draw(self):
        pass

# 创建具体产品类
class Circle(Shape):
    def draw(self):
        print("Inside Circle::draw() method.")

class Rectangle(Shape):
    def draw(self):
        print("Inside Rectangle::draw() method.")

# 定义抽象工厂类
class ShapeFactory:
    def get_shape(self):
        pass

# 创建具体工厂类
class CircleFactory(ShapeFactory):
    def get_shape(self):
        return Circle()

class RectangleFactory(ShapeFactory):
    def get_shape(self):
        return Rectangle()

# 使用
circle_factory = CircleFactory()
circle = circle_factory.get_shape()
circle.draw()

rectangle_factory = RectangleFactory()
rectangle = rectangle_factory.get_shape()
rectangle.draw()

这里ShapeFactory是抽象工厂类,CircleFactoryRectangleFactory是具体的工厂类,它们分别实现了get_shape方法来创建对应的CircleRectangle对象。

(三)抽象工厂模式

python

体验AI代码助手

代码解读

复制代码

# 定义产品接口
class Shape:
    def draw(self):
        pass

class Color:
    def fill(self):
        pass

# 创建具体产品类
class Circle(Shape):
    def draw(self):
        print("Inside Circle::draw() method.")

class Rectangle(Shape):
    def draw(self):
        print("Inside Rectangle::draw() method.")

class Red(Color):
    def fill(self):
        print("Inside Red::fill() method.")

class Blue(Color):
    def fill(self):
        print("Inside Blue::fill() method.")

# 定义抽象工厂类
class AbstractFactory:
    def get_shape(self):
        pass

    def get_color(self):
        pass

# 创建具体工厂类
class ShapeFactory(AbstractFactory):
    def get_shape(self):
        return Circle()

    def get_color(self):
        return None

class ColorFactory(AbstractFactory):
    def get_shape(self):
        return None

    def get_color(self):
        return Red()

# 使用
shape_factory = ShapeFactory()
shape = shape_factory.get_shape()
shape.draw()

color_factory = ColorFactory()
color = color_factory.get_color()
color.fill()

在这个例子中,AbstractFactory是抽象工厂类,ShapeFactoryColorFactory是具体工厂类。ShapeFactory创建形状对象,ColorFactory创建颜色对象。这种模式可以很方便地扩展新的产品族和产品等级结构。

三、python中实现策略模式

(一)定义

策略模式(Strategy Pattern) :定义一系列算法(或操作),将每个算法封装起来,并使它们可以互换。Ironic 的每个 interface(如 DeployInterface)就是一个策略,具体的 driver 实现(如 AgentDeploy、PXEDeploy)就是不同的策略实现。

(二)例子

ruby

体验AI代码助手

代码解读

复制代码

import abc

class DeployInterface(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def deploy(self, task):
        pass

    @abc.abstractmethod
    def tear_down(self, task):
        pass

class PXEDeploy(DeployInterface):
    def deploy(self, task):
        print("Deploying node with PXE")

    def tear_down(self, task):
        print("Tearing down PXE deployment")

class AgentDeploy(DeployInterface):
    def deploy(self, task):
        print("Deploying node with Agent")

    def tear_down(self, task):
        print("Tearing down Agent deployment")
        
def run_deploy(deploy_interface: DeployInterface, task):
    deploy_interface.deploy(task)
    deploy_interface.tear_down(task)

# 假设根据配置或硬件类型动态选择
deploy_impl = PXEDeploy()  # 或 AgentDeploy()
run_deploy(deploy_impl, task={})

# 输出
Deploying node with PXE
Tearing down PXE deployment


转载来源:https://juejin.cn/post/7522960183048585256

相关文章
|
8月前
|
设计模式 SQL 人工智能
Python设计模式:从代码复用到系统架构的实践指南
本文以Python为实现语言,深入解析23种经典设计模式的核心思想与实战技巧。通过真实项目案例,展示设计模式在软件开发中的结构化思维价值,涵盖创建型、结构型、行为型三大类别,并结合Python动态语言特性,探讨模式的最佳应用场景与实现方式,帮助开发者写出更清晰、易维护的高质量代码。
404 1
|
8月前
|
设计模式 人工智能 算法
Python设计模式:从代码复用到系统架构的实践指南
本文探讨了电商系统中因支付方式扩展导致代码臃肿的问题,引出设计模式作为解决方案。通过工厂模式、策略模式、单例模式等经典设计,实现代码解耦与系统扩展性提升。结合Python语言特性,展示了模块化、装饰器、适配器等模式的实战应用,并延伸至AI时代的设计创新,帮助开发者构建高内聚、低耦合、易维护的软件系统。
424 0
|
设计模式 机器学习/深度学习 前端开发
Python 高级编程与实战:深入理解设计模式与软件架构
本文深入探讨了Python中的设计模式与软件架构,涵盖单例、工厂、观察者模式及MVC、微服务架构,并通过实战项目如插件系统和Web应用帮助读者掌握这些技术。文章提供了代码示例,便于理解和实践。最后推荐了进一步学习的资源,助力提升Python编程技能。
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###
|
设计模式 开发者 Python
Python编程中的设计模式应用与实践感悟####
本文作为一篇技术性文章,旨在深入探讨Python编程中设计模式的应用价值与实践心得。在快速迭代的软件开发领域,设计模式如同导航灯塔,指引开发者构建高效、可维护的软件架构。本文将通过具体案例,展现设计模式如何在实际项目中解决复杂问题,提升代码质量,并分享个人在实践过程中的体会与感悟。 ####
|
设计模式 算法 搜索推荐
Python编程中的设计模式:优雅解决复杂问题的钥匙####
本文将探讨Python编程中几种核心设计模式的应用实例与优势,不涉及具体代码示例,而是聚焦于每种模式背后的设计理念、适用场景及其如何促进代码的可维护性和扩展性。通过理解这些设计模式,开发者可以更加高效地构建软件系统,实现代码复用,提升项目质量。 ####
|
设计模式 监控 算法
Python编程中的设计模式应用与实践感悟###
在Python这片广阔的编程疆域中,设计模式如同导航的灯塔,指引着开发者穿越复杂性的迷雾,构建出既高效又易于维护的代码结构。本文基于个人实践经验,深入探讨了几种核心设计模式在Python项目中的应用策略与实现细节,旨在为读者揭示这些模式背后的思想如何转化为提升软件质量的实际力量。通过具体案例分析,展现了设计模式在解决实际问题中的独特魅力,鼓励开发者在日常编码中积极采纳并灵活运用这些宝贵的经验总结。 ###
|
设计模式 监控 数据库连接
Python编程中的设计模式之美:提升代码质量与可维护性####
【10月更文挑战第21天】 一段简短而富有启发性的开头,引出文章的核心价值所在。 在编程的世界里,设计模式如同建筑师手中的蓝图,为软件的设计和实现提供了一套经过验证的解决方案。本文将深入浅出地探讨Python编程中几种常见的设计模式,通过实例展示它们如何帮助我们构建更加灵活、可扩展且易于维护的代码。 ####
|
设计模式 开发者 Python
Python编程中的设计模式:从入门到精通####
【10月更文挑战第14天】 本文旨在为Python开发者提供一个关于设计模式的全面指南,通过深入浅出的方式解析常见的设计模式,帮助读者在实际项目中灵活运用这些模式以提升代码质量和可维护性。文章首先概述了设计模式的基本概念和重要性,接着逐一介绍了几种常用的设计模式,并通过具体的Python代码示例展示了它们的实际应用。无论您是Python初学者还是经验丰富的开发者,都能从本文中获得有价值的见解和实用的技巧。 ####
|
设计模式
python24种设计模式
python24种设计模式

推荐镜像

更多