创建型模式 (Python版)

别再让电池充不满!用CN3791芯片设计太阳能充电电路,这几个调试坑我帮你踩了 本文详细解析了使用CN3791芯片设计太阳能充电电路时的常见调试问题及解决方案。从RCS电阻的选择到MPPT电压偏差的修正,再到线路损耗和温度补偿的优化,提供了全面的避坑指南。通过实测数据和优化方案,帮助工程师提升锂电池充电效率,确保太阳能充电电路的稳定性和可靠性。 阅读详情

单例模式

懒汉式

class SingleTon:
    # 类属性
    _obj = None  # 用来存储对象

    # 创造对象
    def __new__(cls, *args, **kwargs):
        # 如果对象不存在,就创造一个对象
        if cls._obj is None:
            cls._obj = super().__new__(cls, *args, *kwargs)

        # 返回对象
        return cls._obj


if __name__ == '__main__':
    obj_1 = SingleTon()  # 创造一个对象
    obj_2 = SingleTon()  # 再次创造一个对象
    print("obj_1的内存地址:", id(obj_1))  # obj_1的内存地址: 2801491317584
    print("obj_2的内存地址:", id(obj_2))  # obj_2的内存地址: 2801491317584
    print(obj_1 is obj_2)  # True

饿汉式

  • test.py
class SingleTon:
    pass


# 创建一个对象
obj = SingleTon


# 提供接口
def get_instance():
    return obj

  • main.py
from test import get_instance

if __name__ == '__main__':
    obj_1 = get_instance()  # 创建一个对象
    obj_2 = get_instance()  # 再创建一个对象
    print(obj_1 is obj_2)  	# True

工厂模式

简单工厂模式

"""
    实现:简单计算器(加减乘除)
        1. 提供一个抽象产品类
        2. 提供多个具体产品类
        3. 提供一个工厂类
"""

from abc import ABC, abstractmethod


# 计算器(抽象产品类)
class Calculator(ABC):  # 继承 ABC 抽象类
    
    def __init__(self):
        self.left_value = 0
        self.right_value = 0

    def set(self, left_value, right_value):
        self.left_value = left_value
        self.right_value = right_value
        return self

    @abstractmethod
    def run(self):  # 抽象方法
        pass


# 加法计算器(具体产品类)
class AddCalculator(Calculator):  # 继承 Calculator 类
    
    def run(self):
        return self.left_value + self.right_value


# 减法计算器(具体产品类)
class SubCalculator(Calculator):  # 继承 Calculator 类
    
    def run(self):
        return self.left_value - self.right_value


# 乘法计算器(具体产品类)
class MulCalculator(Calculator):  # 继承 Calculator 类
    
    def run(self):
        return self.left_value * self.right_value


# 除法计算器(具体产品类)
class DivCalculator(Calculator):  # 继承 Calculator 类
    
    def run(self):
        if self.right_value == 0:
            raise "除数不能为零!"
        return self.left_value / self.right_value


# 工厂类
class Factory:
    
    @staticmethod
    def produce_calculator(char):  # 类方法
        match char:
            case "+":
                return AddCalculator()  # 创建对象
            case "-":
                return SubCalculator()  # 创建对象
            case "*":
                return MulCalculator()  # 创建对象
            case "/":
                return DivCalculator()  # 创建对象
            case _:
                raise "不支持其他的运算符!"


if __name__ == '__main__':
    # 工厂生产4种类型的计算器产品
    add_calculator = Factory.produce_calculator("+")  # 加法计算器
    sub_calculator = Factory.produce_calculator("-")  # 减法计算器
    mul_calculator = Factory.produce_calculator("*")  # 乘法计算器
    div_calculator = Factory.produce_calculator("/")  # 除法计算器

    # 使用除法计算器
    res = div_calculator.set(10, 5).run()  # 设置左值(被除数)和右值(除数),然后运行
    print(res)  # 2.0

工厂方法模式

from abc import ABC, abstractmethod


# 产品(抽象产品类)
class Product(ABC):  # 继承 ABC 抽象类
    
    # 抽象:此产品补充燃料的功能
    @abstractmethod
    def fuel(self):
        pass

    # 抽象:此产品起飞的功能
    @abstractmethod
    def fly(self):
        pass


# 飞机(具体产品类)
class PlaneProduct(Product):  # 继承 Product 产品类
    
    # 实现:此产品补充燃料的功能
    def fuel(self):
        print(f"飞机-CS{id(self)},补充燃料中...")

    # 实现:此产品起飞的功能
    def fly(self):
        print(f"飞机-CS{id(self)},起飞!")


# 火箭(具体产品类)
class RocketProduct(Product):  # 继承 Product 产品类
    
    # 实现:此产品补充燃料的功能
    def fuel(self):
        print(f"火箭-CS{id(self)},补充燃料中...")

    # 实现:此产品起飞的功能
    def fly(self):
        print(f"火箭-CS{id(self)},起飞!")


# 工厂(抽象工厂类)
class Factory(ABC):
    
    # 抽象:生产产品
    @abstractmethod
    def produce_product(self):
        pass


# 飞机工厂(具体工厂类)
class PlaneFactory(Factory):
    
    # 具体:生产飞机产品
    def produce_product(self):
        return PlaneProduct()  # 创建对象,并返回出去


# 火箭工厂(具体工厂类)
class RocketFactory(Factory):
    
    # 具体:生产火箭产品
    def produce_product(self):
        return RocketProduct()  # 创建对象,并返回出去


# 演示
def work(factory):
    product = factory.produce_product()  # 工厂生产产品
    product.fuel()  # 使用产品的"补充燃料"功能
    product.fly()  # 使用产品"飞行"的功能


if __name__ == '__main__':
    # 创建一个飞机工厂
    plane_factory = PlaneFactory()

    # 让飞机工厂干活
    work(plane_factory)

    # 创建一个火箭工厂
    rocket_factory = RocketFactory()

    # 让火箭工厂干活
    work(rocket_factory)

抽象工厂模式

from abc import ABC, abstractmethod


# 抽象产品
class Product(ABC):
    
    @abstractmethod
    def show(self):
        pass


# 抽象键盘产品
class KeyBoard(Product):
    
    @abstractmethod
    def show(self):
        pass


# 抽象鼠标产品
class Mouse(Product):
    
    @abstractmethod
    def show(self):
        pass


# 具体键盘产品1
class MikaKeyBoard(KeyBoard):
    
    def show(self):
        print("Mika键盘")


# 具体键盘产品2
class PikiKeyBoard(KeyBoard):
    
    def show(self):
        print("Piki键盘")


# 具体鼠标产品1
class MikaMouse(Mouse):
    
    def show(self):
        print("Mika鼠标")


# 具体鼠标产品2
class PikiMouse(Mouse):
    
    def show(self):
        print("Piki鼠标")


# 抽象工厂类
class Factory(ABC):
    
    @abstractmethod
    def produce_keyboard(self):
        pass

    @abstractmethod
    def produce_mouse(self):
        pass


# 具体工厂1
class MikaFactory(Factory):
    
    def produce_keyboard(self):
        return MikaKeyBoard()

    def produce_mouse(self):
        return MikaMouse()


# 具体工厂2
class PikiFactory(Factory):
    
    def produce_keyboard(self):
        return PikiKeyBoard()

    def produce_mouse(self):
        return PikiMouse()


# 测试
def work(factory):
    keyborad = factory.produce_keyboard()  # 工厂制作键盘
    mouse = factory.produce_mouse()  # 工厂制作鼠标
    keyborad.show()  # 查看键盘信息
    mouse.show()  # 查看鼠标信息


if __name__ == '__main__':
    # 创造Mika工厂,让它运行工作
    factory = MikaFactory()
    work(factory)

    # 创建Piki工厂,让它运行工作
    factory = PikiFactory()
    work(factory)

建造者模式

"""
    小明想要给自己的"戴尔"电脑外接一些设备:Mika鼠标、Piki键盘
    小花想要给自己的"联想"电脑外接一些设备:Piki鼠标、Mika键盘
        1. 找到技术人员告诉需求
        2. 技术员工进行组装
        3. 检查组装情况
"""

from abc import ABC, abstractmethod


# 组装电脑(抽象)
class AssembleComputer(ABC):

    @abstractmethod
    def install_mouse(self, brand):  # 安装鼠标(抽象)
        pass

    @abstractmethod
    def install_keyboard(self, brand):  # 安装键盘(抽象)
        pass

    @abstractmethod
    def show(self):  # 查看组装的状态(抽象)
        pass


# 组装"戴尔"电脑(具体)
class AssembleDellComputer(AssembleComputer):

    def __init__(self):
        self.__installation_list = []  # 安装列表,用来记录当前已经成功安装了的组件

    def install_mouse(self, brand):
        self.__installation_list.append(f"{brand}鼠标")
        print(f"已安装:{brand}鼠标")

    def install_keyboard(self, brand):
        self.__installation_list.append(f"{brand}键盘")
        print(f"已安装:{brand}键盘")

    def show(self):
        print("此电脑的所有外接设备:", end="")
        for item in self.__installation_list:
            print(item, end=", ")
        print()


# 组装"联想"电脑(具体)
class AssembleLenovoComputer(AssembleComputer):

    def __init__(self):
        self.__installation_list = []  # 安装列表,用来记录当前已经成功安装了的组件

    def install_mouse(self, brand):
        self.__installation_list.append(f"{brand}鼠标")
        print(f"已安装:{brand}鼠标")

    def install_keyboard(self, brand):
        self.__installation_list.append(f"{brand}键盘")
        print(f"已安装:{brand}键盘")

    def show(self):
        print("此电脑的所有外接设备:", end="")
        for item in self.__installation_list:
            print(item, end=", ")
        print()


# 建造者(抽象)
class Builder(ABC):

    def __init__(self, computer_type):
        # self.product 里面保存(维护)着一个组装对象
        if computer_type == "戴尔":
            self._product = AssembleDellComputer()
        elif computer_type == "联想":
            self._product = AssembleLenovoComputer()
        else:
            raise "电脑类型错误!"

    @abstractmethod
    def install_mouse(self, brand):
        pass

    @abstractmethod
    def install_keyboard(self, brand):
        pass

    @abstractmethod
    def check(self):
        pass


# 建造者(具体)————技术人员
class Technician(Builder):

    # 技术人员安装鼠标
    def install_mouse(self, brand):
        print(f"技术人员正在安装{brand}鼠标...")
        self._product.install_mouse(brand)
        print(f"技术人员安装{brand}鼠标成功!")

    # 技术人员安装键盘
    def install_keyboard(self, brand):
        print(f"技术人员正在安装{brand}键盘...")
        self._product.install_keyboard(brand)
        print(f"技术人员安装{brand}键盘成功!")

    # 技术人员检查安装情况
    def check(self):
        print("技术人员正在检查设备的安装情况...")
        print("技术人员检查完毕,安装结果如下:")
        self._product.show()


if __name__ == '__main__':
    # 创造一个负责组装戴尔电脑的技术人员
    t1 = Technician("戴尔")

    # 创造一个负责组装联想电脑的技术人员
    t2 = Technician("联想")

    # 小明告诉 t1 技术人员,组装 Mika鼠标、Piki键盘,技术人员根据要求进行安装
    t1.install_mouse("Mika")
    t1.install_keyboard("Piki")

    # 小花告诉 t2 技术人员,组装 Piki鼠标、Mika键盘,技术人员根据要求进行安装
    t2.install_mouse("Piki")
    t2.install_keyboard("Mika")

    # t1 技术人员检查组装情况
    t1.check()

    # t2 技术人员检查组装情况
    t2.check()

原型模式

import copy  # 导入copy模块,用于深度复制对象


# 定义一个名为 Prototype(原型)的类,用于管理对象的注册、注销和克隆
class Prototype:
    def __init__(self):
        self._objects = {}  # 初始化一个字典来存储注册的对象,键为名称,值为对象实例

    def register_object(self, name, obj):
        """  
        注册一个对象到_objects字典中  
        :param name: 对象的名称  
        :param obj: 要注册的对象实例  
        """
        self._objects[name] = obj

    def unregister_object(self, name):
        """  
        从_objects字典中注销一个对象  
        :param name: 要注销的对象的名称  
        """
        del self._objects[name]

    def clone(self, name, **attr):
        """  
        克隆一个已注册的对象,并更新其内部属性字典  
        :param name: 要克隆的对象的名称  
        :param attr: 要更新的属性字典,使用关键字参数传入  
        :return: 克隆并更新后的对象实例  
        """
        obj = copy.deepcopy(self._objects.get(name))  # 使用deepcopy进行深度复制,得到一个新的对象实例
        obj.__dict__.update(attr)  # 更新对象的__dict__属性,即更新其内部属性。  attr == {'a': 1, 'b': 2, 'c': 3}
        return obj


def test():
    # 定义一个类A,用于演示
    class A:
        def __str__(self):
            return "I am A"

    # 创建A的一个实例a
    a = A()

    # 创建一个Prototype实例,用于管理对象
    prototype = Prototype()

    # 将a注册到prototype中,名称为'a'
    prototype.register_object('a', a)

    # 克隆a并更新其内部属性,得到b
    b = prototype.clone('a', a=1, b=2, c=3)

    # 打印a的字符串表示
    print(a)

    # 打印b的内部属性字典
    print(b.__dict__)

    # 尝试打印b的属性a, b, c
    print(b.a)
    print(b.b)
    print(b.c)


if __name__ == '__main__':
    test()

补充说明:

  • 原型模式(Prototype Pattern)是一种创建型设计模式,它允许一个对象通过复制其自身的内部状态来创建新的对象实例。

  • 这种复制过程可以被称为“克隆”。

  • 原型模式提供了一种不依赖于类的构造函数来创建对象实例的方式,而是使用现有的对象实例来创建新的对象。

原型模式的作用:

  1. 性能优化:当对象的创建过程非常复杂或者代价非常高时,使用原型模式可以避免重复执行这些复杂的操作,从而提高性能。通过克隆一个已经存在的对象,可以快速地生成新的对象实例。
  2. 避免子类的构造函数被频繁调用:在继承层次较深的场景下,频繁地调用子类的构造函数可能会带来性能问题。通过原型模式,可以避免这种情况,因为对象的创建是通过克隆来完成的。
  3. 动态扩展:由于原型模式允许在运行时动态地添加或删除对象,因此它可以支持动态扩展。这意味着可以根据需要动态地改变系统中对象的数量或类型。
  4. 简化对象创建:当对象创建涉及复杂的配置或设置时,原型模式可以提供一个更简单的创建对象的方式。通过克隆一个已经配置好的对象实例,可以快速地生成具有相同配置的新对象。

示例代码中的原型模式:

  • 在示例代码中,Prototype类就是一个原型管理器的实现。
  • 它维护了一个存储已注册对象的字典(_objects)。
  • 通过register_object()方法可以将对象注册到字典中,通过unregister_object()方法可以从字典中注销对象。
  • clone()方法则用于克隆已注册的对象,并允许通过关键字参数来更新克隆对象的属性。
  • 这个示例代码中的A类是一个简单的类,用于演示原型模式的使用。
  • 通过创建一个A类的实例a,并将其注册到Prototype实例中,然后调用clone()方法来克隆a并更新其属性,可以得到一个新的对象实例b。
  • 这个过程中,a和b是独立的对象实例,但它们具有相同的初始状态(因为b是a的克隆),并且b的属性可以被单独更新。

总结

创建型模式总结

  • 单例模式:创建一个全局的对象
  • 工厂方法模式:实现单个类的对象的创建
  • 抽象工厂模式:实现多个类的对象的创建
  • 建造者模式:实现复杂类的对象的创建
  • 原型模式:实现自身类的克隆
等保测评-瀚高数据库 一般适用于等保测评 阅读详情

相关推荐

《Halcon 100项目-9》Halcon彩色线序检查

Halcon彩色线序检查

doubleintfloat的博客 1042

设计模式及创建型模式-python版

设计模式介绍

zhanghuaren2003的博客 1350

FPGA实现电机转速PID控制

通过纯RTL实现电机转速PID控制,包括电机编码器值读取,电机速度、正反转控制,PID算法,卡尔曼滤波,最终实现对电机速度进行控制,使其能够渐近设定的编码器目标值。

STATEABC的博客 7479

Python 设计模式(第2版) -- 第一部分(创建型模式)

Python是一种动态语言。设计模式是由 GoF(Gang of Four)首先提出的,根据他们的观点,设计模式就是解决特定问题的解决方案。首先来看看创建型设计模式有哪些。

Talk is cheap, show the code. zhangsihui.pythonanywhere.com 1248

西门子PLC1200与CB1241模块的Modbus RTU从站配置全流程(附串口调试技巧)

本文详细介绍了西门子S7-1200 PLC与CB1241通信模块实现Modbus RTU从站配置的全流程,包括硬件接线规范、TIA Portal工程组态、通信指令编程及串口调试技巧。通过实战案例和常见错误处理方案,帮助工程师快速搭建稳定的工业通信系统,提升自动化设备的互联互通能力。

weixin_29165725的博客 325

最新Anaconda3的安装配置及使用教程(详细过程)

最新Anaconda3安装使用Anaconda下载方式一:官网下载方式二:清华镜像下载(推荐)Anaconda安装 Anaconda是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项 Anaconda + Jupyter 基本上已经是大部分机器学习/数据分析等开发者标配的开发环境, 不多介绍,直接进去正题: Anaconda下载 方式一:官网下载 下载地址传送门: 官网首页:https://www.anaconda.com/ 官网下载页:https://www

HowieXue 薛永浩的博客 34万+

Python版设计模式: 创建型模式:单例模式和工厂模式家族

一. 单例模式(Singleton) 所谓单例模式,也就是说不管什么时候都要确保只有一个对象实例存在。很多情况下,整个系统中只需要存在一个对象,所有的信息都从这个对象获取,比如系统的配置对象,或者是线程池。这些场景下,就非常适合使用单例模式。 总结起来,就是说不管初始化一个对象多少次,真正干活的对象只会生成一次并且在首次生成。 用Python 实现单例模式的方法有很多,先来看第一种方式。 ...

weixin_30491641的博客 256

【考研高数-高等数学-基础】第一章 函数、极限、连续

第一章 函数、极限、连续 第二章 导数与微分 第三章 微分中值定理及导数应用 第四章 不定积分 第五章 定积分与反常积分 第六章 定积分的应用 第七章 微分方程 第八章 多元函数微分学 第九章 二重积分 第十章 无穷级数 第十一章 向量代数与空间解析几何及多元微分学在几何上的应用 第十二章 多元积分学及其应用 难题: 极限的递推 微分中值定理的证明题 定积分的不等式和等式的证明 重积分的不等式和等式的证明 线面积分的不等式和等...

刘鑫磊 2034

Python版23种设计模式终极指南:原理+场景+实战代码全覆盖

本文完整实现了23种设计模式的Python代码示例,覆盖创建型结构型行为型三大类别。设计模式本质是代码设计经验的总结避免过度设计:优先使用简单直观的方案结合语言特性:如Python可利用装饰器语法简化实现关注场景匹配:如观察者模式适用于事件驱动系统保持灵活性:通过工厂模式隔离变化点。

燃灯工作室 2120

视觉Transformer实战 | Data-efficient image Transformer(DeiT)详解与实现

在计算机视觉领域,Vision Transformer (ViT) 已经证明了纯 Transformer 架构在图像分类任务上的强大能力。然而,ViT 通常需要在大规模数据集上预训练才能达到最佳性能,DeiT (Data-efficient image Transformer) 通过引入一系列训练策略和优化,使得 Transformer 模型能够在相对较小的数据集上取得优异表现。本节将详细介绍 DeiT 的技术原理,并使用 PyTorch 从零开始实现 DeiT 模型。

盼小辉丶的博客 1341

AutoSAR配置与实践(深入篇)5.4 OS原理(下 )- 内存保护(MPU)

ECU可能由内部模块、第三方模块等各模块集成的。需求对每个模块所定义的安全等级可能有差异,需要考虑不同安全等级的模块和代码间减少相互干扰,防止程序错误传播。可以理解为包含Task、Alarm、Counter、Schedule table、ISRs、Event等基本对象的容器,用于隔离Task/Alarm等,进行内存保护。

nihaoljq2010的博客 3536

设计模式看了又忘,忘了又看?

文章首发:设计模式看了又忘,忘了又看? 设计模式收藏这篇就够了 耗时了 5 个月,终于把设计模式一整个系列写完。其实设计模式这一系列文章网上已经有很多非常好、非常优秀的文章,为什么要写呢? 一方面是为了学得更扎实,印象中设计模式学习了 2 遍,记得牢的基本就那几个众所周知的,反思前面 2 次学习过程,缺少了思考的过程,没有把知识消化掉转化成自己的,就像动物一样,吃进去的东西没有消化只能排出。...

weixin_33947521的博客 456

欺诈文本分类微调(一):基座模型选型

通义千问Qwen2具有0.5B、1.5B、7B、72B等一系列参数大小不等的模型,我们需要做的是从大到小依次测试每个模型的能力,找到满足自己需要的最小参数模型。依1.5B和1.5B-Instruct的主要区别:按照官方文档,前者是预训练模型,后者是经过指令微调的模型。

golfxiao的专栏 2655

【亲测免费】 探索《精通Python设计模式(第二版)》:构建高效代码的艺术

探索《精通Python设计模式(第二版)》:构建高效代码的艺术 在这个快速发展的编程世界里,掌握高效的编程技术和设计理念是提升软件质量的关键。GitCode上托管的《精通Python设计模式(第二版)》项目,正是一个旨在帮助开发者深入理解并应用Python设计模式的宝贵资源。 项目简介 该项目是一个完整的开源电子书,由Packt Publishing出版,作者是Amit Saha。它全面覆盖了23...

gitblog_00053的博客 427

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

python——常见创建型设计模式

单例模式(Singleton Pattern):保证系统中只有一个实例,适合用于全局状态、资源共享的场景。可以通过元类或装饰器实现单例。通过import实现单例:利用 Python 模块的天然单例特性,简化全局对象的管理,适用于全局配置、资源共享等场景。Monostate 模式(共享状态):允许多个实例共享状态,而不是共享同一个对象。通过类属性的方式,多个对象可以在状态上保持一致性,适用于多个实例需要共享状态的场景。

pumpkin84514的博客 1278

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

基于Python的设计模式之创建型模型

设计模式(GOF,即 Gang of Four,四人组提出的经典设计模式)是面向对象系统中对重要且重复出现的设计进行系统化总结的方案。它包含模式名称、问题、解决方法和效果这四个基本要素,有助于开发者更高效地设计和构建软件系统。

懂搬砖 1050

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

设计模式之创建型模式

创建型模式与对象的创建有关

qq_45450889的博客 2311

Python之常用设计模式(创建型模式篇)

Python之常用设计模式 一、设计模式分类 1. 创建型模式 工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式 2. 结构型模式 适配器模式、桥模式、组合模式、装饰模式、外观模式、享元模式、代理模式 3. 行为型模式 解释器模式、责任链模式、命令模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、访问者模式、模板方法模式 二、创建型模式 1. 简单工厂模式 内容 不直接向客户端暴露对象创建的实现细节,而是通过一个工厂类来负责创建产品类的实例。 角色(类) 工厂

南枝向暖北枝寒 2066

Python学习笔记(5)Python的创建型设计模式

单例模式可以用Python的模块来实现,没有特别的地方。由于Python可以动态的访问类对象,所以原型模式也什么意义(python提供了内置的copy方法)所以最有用的是抽象工厂模式工厂方法模式建造者模式。

立志成为炼丹师? 1203

设计模式Python版 单例模式

介绍了GOF单例模式,单例模式的Python示例,以及单例模式在Django框架的应用。

分享、交流、合作 3305

23种设计模式Python版

目录创建型模式简单工厂模式工厂方法模式抽象工厂模式单例模式原型模式建造者模式结构型模式适配器模式桥接模式组合模式装饰器模式外观模式享元模式代理模式行为型模式职责链模式命令模式解释器模式迭代器模式中介者模式备忘录模式观察者模式状态模式策略模式模板方法模式访问者模式Reference 创建型模式 简单工厂模式 实现 from abc import abstractmethod, ABCMeta class Product(metaclass = ABCMeta): def __init__(se

ccnuacmhdu的博客 1623

一个实例用全创建型模式

一个实例用全创建型模式

xie__jin__cheng的博客 2323

python创建型模式

常见创建型模式 工厂模式(Factory):解决对象创建问题 构造模式(Builder):控制复杂对象的创建 原型模式(Prototype):通过原型的克隆创建新的实例 单例(Borg/Singleton):一个类只能创建同一个对象 对象池模式(Pool):预先分配同一类型的一组实例 惰性计算模式(Lazy Evaluation):延迟计算(python的property) ...

weixin_44091709的博客 366

设计模式Python版 原型模式

介绍了GOF设计模式中的原型模式,用Python实现原型模式示例,以及原型管理器。

分享、交流、合作 1847

Python 设计模式系列之二: 创建型 Simple Factory 模式

软件设计大师总是要比初学者更加清楚该如何设计软件,因为他们手中掌握着设计模式这一法宝。作为一种高级的软件复用形式,设计模式是众多优秀软件设计师集体智慧的结晶,能够很好地指导软件设计过程。本系列文章讲述如何在用Python开发软件时应用各种设计模式,此次介绍的是创建型简单工厂(Simple factory)模式。 一、创建型模式 创建型模式(Creational Pattern)对类的实例化

kongji103的博客 411

5种创建型设计模式的python极简示例和应用价值

抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。工厂模式专注于单一产品(按钮),而抽象工厂涉及产品族(按钮和滚动条),展示了抽象工厂在管理多种产品类型方面的能力。工厂模式每个工厂类只创建一种产品,而抽象工厂模式的每个工厂类可以创建多个不同种类的产品(产品族)。在工厂模式中,增加新的产品需要增加新的工厂类,适合产品种类较多但是产品类别不频繁增加的情况。而抽象工厂模式易于增加新的产品族,但是增加新的产品功能则需要修改抽象工厂的接口,适合产品族扩展的需求。passpass。

酌沧 1328
上一篇: Python3 类的内置属性、内置方法(魔法方法)、常用装饰器
下一篇: 结构型模式 (Python版)
code_stream
博客等级 码龄4年 1238粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值