python24种设计模式

简介: python24种设计模式

请看大王的表演

 

1.单例模式

"""
单例模式:就是项目从头到尾只会创建一个对象;

解析:就是判断对象存在吗,不存在则创建

原理:类实例化,会走new方法。

"""
class A():
    __obj = None
    def __new__(cls, *args, **kwargs):
        if not cls.__obj:
            cls.__obj = object.__new__(cls)
        return cls.__obj

def fun():
    a = A()
    print(id(a))

# 测试代码啊
from threading import Thread
for i in range(500):
    t = Thread(target=fun)
    t.start()

View Code

2.工厂模式

"""
工厂模式:就是一个工厂,你告诉我吉利,我就会给你创建吉利,我不会让你看到是怎么创建的;

这个要求对象内部属性和方法都是一样的。
"""

class CarFactory():
    def create(self,obj):
        obj.create()

class CarA():
    def create(self):
        print("创建A型号车,ID为99")

class CarB():
    def create(self):
        print("创建B型号车,ID为99")

if __name__ == "__main__":
    # 创建一个工厂对象
    carFactory = CarFactory()

    # 生产车A
    carA = CarA()
    carFactory.create(carA)
    # 生产车B
    carB = CarB()
    carFactory.create(carB)

View Code

3.建造者模式

"""
建造者模式模式:我认为是 对调用工厂模式的封装

这个要求对象内部属性和方法都是一样的。
"""

class CarFactory():
    def create(self,obj):
        obj.create()

class CarA():
    def create(self):
        print("创建A型号车,ID为99")

class CarB():
    def create(self):
        print("创建B型号车,ID为99")


def initCreate():
    # 创建一个工厂对象
    carFactory = CarFactory()

    # 生产车A
    carA = CarA()
    carFactory.create(carA)
    # 生产车B
    carB = CarB()
    carFactory.create(carB)
    
if __name__ == "__main__":
    initCreate()

View Code

4.适配器模式

"""
适配器类:
是为了不让用户看到这个类,所以需要对这个类进行封装一下;
男人类一代隐身
男人类二代继承一代


这个和工厂的模式的区别:

工厂模式:用工厂类去 适配 所有的类
适配器模式:用一个二代类 适配 其中一个类

"""

# 基类
class People():
    pass

# 想让他看见这个类
class Woman(People):
    def __init__(self,name):
        self.name = name

    def eat(self):
        print(f"女人在吃饭")

# 1.1不想让他们看到这个类,
class Man(People):
    def __init__(self,name):
        self.name = name

    def eat(self):
        print(f"男人在吃饭")
#1.2需要写一个类对他重写一下
class TranslatMan(People):
    obj = None
    def __init__(self,name):
        self.obj = Man(name)

    def eat(self):
        self.obj.eat()

if __name__ == "__main__":
    woman = Woman("小琴")
    woman.eat()
    translatMan = TranslatMan("木木")
    translatMan.eat()
相关文章
|
3月前
|
设计模式 存储 算法
Python中的设计模式与最佳实践
【6月更文挑战第12天】```markdown 设计模式是软件开发中的标准解决方案,提升代码复用、可维护性。本文讨论了Python中的设计模式应用,如单例、工厂、观察者、策略、装饰器、原型、建造者、命令、状态、中介者和适配器模式。每个模式都有相应的Python示例,展示如何在实际编程中应用。适配器模式转换接口,外观模式简化复杂系统,两者都增强了代码的兼容性和易用性。设计模式是软件设计的重要工具,帮助解决常见问题,降低耦合度,提高系统灵活性。
91 4
Python中的设计模式与最佳实践
|
4天前
|
异构计算 Python
StableDiffusionPipeline
【9月更文挑战第22天】
162 77
|
4天前
|
机器学习/深度学习 vr&ar 异构计算
diffusers
【9月更文挑战第22天】
158 75
|
13天前
|
Shell API Python
WinDbg调试(三)-- 空格引发的悬案
文章介绍了一个由空格引发的目录删除失败问题。在使用 `rmdir` 指令删除目录时,部分环境出现删除失败但无错误日志的情况。通过 WinDbg 调试发现,路径中的空格导致路径被截断,从而无法正确删除目录。最终解决方案是在路径上添加双引号以确保路径完整。
184 82
|
14天前
|
JSON Java 关系型数据库
Optimizer Use of Generated Column Indexes
MySQL支持对生成的列进行索引并利用这些索引优化查询执行计划。即使查询未直接引用生成列,只要表达式与生成列定义匹配,优化器也会自动使用索引。但表达式需与生成列定义完全一致且结果类型相同。此功能适用于特定运算符如=、<、BETWEEN等。生成列定义需含函数调用或指定运算符。对于JSON值的比较,使用`JSON_UNQUOTE()`以确保正确匹配。若优化器未选择合适索引,可使用索引提示调整。
154 82
|
13天前
|
安全 C语言
C语言运算符的使用注意点
在C语言中,正确使用运算符能提升代码的可读性和效率。本文介绍了八大注意事项:运算符优先级和结合性影响运算顺序;自增/自减运算符分前缀和后缀形式;逻辑运算符有短路特性;位运算符直接操作二进制位需谨慎;条件运算符简洁但避免复杂嵌套;类型转换避免意外结果;使用括号明确运算顺序。掌握这些要点有助于编写更安全高效的代码。
161 72
|
14天前
|
Java
Java源文件声明规则详解
Java源文件的声明规则是编写清晰、可读且符合语法规范的Java程序的基础。这些规则包括文件名必须与公共类名相同、包声明位于文件顶部、导入声明紧跟其后、类声明需明确访问级别,并允许使用注释增强代码可读性。一个源文件可包含多个类,但只能有一个公共类。遵循这些规则有助于提升代码质量和维护性。
|
4月前
|
设计模式 数据挖掘 开发者
Python中的面向对象编程与设计模式
【2月更文挑战第1天】Python作为一种动态、面向对象的高级编程语言,广泛应用于Web开发、数据分析等领域。本文将介绍Python中的面向对象编程特性,并结合常用的设计模式,探讨如何在Python中实现灵活、可维护的代码结构。
32 2
|
设计模式 算法 数据库
Python常用的设计模式(下)
Python常用的设计模式(下)
|
设计模式 数据库 Python
Python常用的设计模式(上)
Python常用的设计模式(上)