当前位置: 首页 > news >正文

【Python】设计模式

设计模式分为三种类型,共23类。

  • 创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。
  • 结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
  • 行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。

除了设计模式,还有六大设计原则:

  • 单一职责原则(Single Responsibility Principle)

  • 开闭原则(Open Closed Principle)

  • 里氏替换原则(Liskov Substitution Principle)

  • 迪米特法则(Law of Demeter),又叫“最少知道法则”

  • 接口隔离原则(Interface Segregation Principle)

  • 依赖倒置原则(Dependence Inversion Principle)。

单例模式

单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。

  • 定义:保证一个类只有一个实例,并提供一个访问它的全局访问点
  • 适用场景:当一个类只能有一个实例,而客户可以从一个众所周知的访问点访问它时。

单例的实现模式:

  1. 在一个文件中定义如上代码

    class Tools:passtool = Tools()
    
  2. 在另一个文件中导入对象

    from tools import toolt1 = tool
    t2 = toolprint(t1)   # <tools.Tools object at 0x0000020A3F154DC0>
    print(t2)   # <tools.Tools object at 0x0000020A3F154DC0>print(id(t1))   # 2243031289280
    print(id(t2))   # 2243031289280
    
  3. 可以看出t1和t2是同一个对象。

单例模式优点:

  • 节省内存
  • 节省创建对象的开销

工厂模式

当需要大量创建一个类的实例的时候,可以使用工厂模式。即,从原生的使用类的构造去创建对象的形式
迁移到,基于工厂提供的方法去创建对象的形式。

# 工厂模式
class Person:passclass Worker(Person):passclass Student(Person):passclass Teacher(Person):passclass Factory:@classmethod    # 将该类方法定义为静态方法def get_person(self, p_type):if p_type == 'w':return Worker()elif p_type == 's':return Student()else:return Teacher()worker = Factory.get_person('w')
student = Factory.get_person('s')
teacher = Factory.get_person('t')print(worker)
print(student)
print(teacher)
http://www.lryc.cn/news/160997.html

相关文章:

  • C++ 数字
  • code阶段——gitgitlab安装
  • C 风格文件输入/输出---无格式输入/输出
  • Spring-MVC的文件上传下载,及插件的使用(让项目开发更节省时间)
  • 算法 数据结构 递归冒泡算法 java冒泡算法 优化递归冒泡 数据结构(九)
  • 【计算机视觉 | 目标检测】目标检测常用数据集及其介绍(十五)
  • 洛谷P8814:解密 ← CSP-J 2022 复赛第2题
  • Flutter实现CombineExecutor进行多个异步分组监听,监听第一个异步执行的开始和最后一个异步执行结束时机。
  • 2023 年最新Java 毕业设计选题题目参考,500道 Java 毕业设计题目,值得收藏
  • Mac电脑其他文件占用超过一大半的内存如何清理?
  • geopandas 笔记: datasets 数据集
  • 长胜证券:三大拐点共振 看好智能驾驶新一轮行情
  • AIGC专栏5——EasyPhoto AI写真照片生成器 sd-webui插件介绍、安装与使用
  • 【Python程序设计】 工厂模式【07/8】
  • PHP8的多维数组-PHP8知识详解
  • 【【STM32--28--IO引脚的复用功能】】
  • CodeJock Active-X / COM v22.1.0 Crack
  • mac通过docker搭建elasticsearch:8.9.2以及kibana:8.9.2
  • python实现排列组合代码
  • 盲盒小程序开发方案
  • Mysql锁
  • Kubernetes(k8s)安装NFS动态供给存储类并安装KubeSphere
  • 机器学习笔记 - 【机器学习案例】基于KerasCV的预训练模型自定义多头+多标签预测
  • Linux Debian常用70条经典运维命令和使用案例
  • 【涵子来信】——步入中学,日积跬步,以致千里
  • 【sgCreateAPI】自定义小工具:敏捷开发→自动化生成API接口脚本(接口代码生成工具)
  • 数据库相关基础知识
  • LeetCode刷题笔记【23】:贪心算法专题-1(分发饼干、摆动序列、最大子序和)
  • C++算法 —— 分治(2)归并
  • Hadoop YARN HA 集群安装部署详细图文教程