python设计模式-单例模式,工厂模式

news2025/1/11 14:25:11

单例模式

单例模式将类的实例化限制为一个对象。 它是一种创建模式,只涉及创建方法和指定对象的一个类。
它提供了创建实例的全局访问点。
在这里插入图片描述

如何实现一个单例类?

下面的程序演示了单例类的实现,并多次打印创建的实例。

class Singleton:
   __instance = None
   @staticmethod 
   def getInstance():
      """ Static access method. """
      if Singleton.__instance == None:
         Singleton()
      return Singleton.__instance
   def __init__(self):
      """ Virtually private constructor. """
      if Singleton.__instance != None:
         raise Exception("This class is a singleton!")
      else:
         Singleton.__instance = self
s = Singleton()
print s

s = Singleton.getInstance()
print s

s = Singleton.getInstance()
print s

执行上面的程序后,生成以下输出 -
在这里插入图片描述
创建的实例数量相同,并且打印的对象是同一个对象。

工厂模式

工厂模式属于创建模式列表类别。它提供了创建对象的最佳方法。 在工厂模式中,创建对象时不会将逻辑公开给客户端,并使用通用接口引用新创建的对象。
工厂模式使用工厂方法在Python中实现。 当用户调用一个方法时,传入一个字符串,并通过工厂方法实现创建一个新对象,并将此对象作为返回值。 工厂方法中使用的对象类型由通过方法传递的字符串确定。在下面的例子中,每个方法都包含对象作为参数,这是通过工厂方法实现的。

如何实施工厂模式?

现在让我们看看如何实现工厂模式。参考以下代码

class Button(object):
   html = ""
   def get_html(self):
      return self.html

class Image(Button):
   html = "<img></img>"

class Input(Button):
   html = "<input></input>"

class Flash(Button):
   html = "<obj></obj>"

class ButtonFactory():
   def create_button(self, typ):
      targetclass = typ.capitalize()
      return globals()[targetclass]()

button_obj = ButtonFactory()
button = ['image', 'input', 'flash']
for b in button:
   print button_obj.create_button(b).get_html()

Button类有助于创建html标签和关联的html页面。 客户端将无法访问代码的逻辑,只输出表示创建html页面。
执行上面示例代码,得到以下结果 -
在这里插入图片描述
说明:python代码包含html标签的逻辑,这是指定的值。 最终用户可以查看由Python代码创建的HTML文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/193951.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

动态规划(详细解释)

日升时奋斗&#xff0c;日落时自省 目录 1、Fibonacci 2、字符串分割 3、三角矩阵 4、路径总数 5、最小路径和 6、背包问题 7、回文串分割 8、编辑距离 9、不同子序列 10、总结 DP定义&#xff1a; 动态规划是分治思想的延伸&#xff0c;通俗一点来说就是大事化小&a…

高密度 ARM 服务器如何引领“数智时代”发展,打通“智变质变”正循环

并行计算 | 多样性计算 | ARM架构 深度学习 | 高性能计算 | ARM服务器 如今随着算力、高性能计算的快速发展&#xff0c;数字经济已经成为全球经济增长的主引擎。数字经济的快速发展&#xff0c;使得深度学习、数据分析、数据挖掘等技术迅猛发展起来。伴随国家政策东数西算的…

无痕埋点在Android中的实现

无痕埋点在Android中的实现 目标 解决手动打点效率低下问题自动化埋点 本篇技术实现主要是运行是代理&#xff0c;不涉及到插桩技术&#xff0c;不引入插件&#xff0c;对业务影响点最小 技术难点 1. 如何拦截到所有的view的点击事件 view有个setAccessibilityDelegate方…

Day02-带你走进数据分析的世界

文章目录Day02-带你走进数据分析的世界数据分析正在影响我们的工作、生活数据分析和你想象中的一样吗我们应该具备的数据分析能力Day02-带你走进数据分析的世界 数据分析正在影响我们的工作、生活 随着全球经济数字化转型的发展&#xff0c;各行各业都积累了大量的数据。 具有…

微信小程序做全局登录弹窗

需求&#xff1a;在任意需要弹出登录的页面&#xff0c;后台返回需要登录状态码&#xff0c;弹出登录弹窗进行登录&#xff0c;并刷新当前页面 过程&#xff1a;因为微信小程序无法封装一个全局组件通过方法全局调用。因此只能封装一个公共组件&#xff0c;在需要弹窗的页面注册…

Spark入门指南

文章目录什么是SparkSpark学习路线Spark入门指南什么是Spark Apache Spark 是一个开源集群运算框架&#xff0c;最初是由加州大学伯克利分校 AMP 实验室所开发。相对于 Hadoop 的 MapReduce 会在运行完工作后将中间数据存放到磁盘中&#xff0c;Spark 使用了存储器内存运算技术…

SpringMVC之请求与响应

目录 一&#xff1a;设置请求映射路径 1. 环境准备 二&#xff1a;问题分析 三&#xff1a;设置映射路径 四&#xff1a;请求参数 一&#xff1a;设置请求映射路径 1. 环境准备 创建一个Web的Maven项目 pom.xml添加Spring依赖 <?xml version"1.0" encodi…

基于Android的电子影院系统

需求信息&#xff1a; 客户端&#xff1a; 1&#xff1a;用户注册登录&#xff1a;通过手机号码、用户名称以及密码完成用户的注册和登录 2&#xff1a;影院信息&#xff1a;用户可以查看发布的影院信息以及查看影院具体反映的电影信息以及可以查看电影的宣传片&#xff1b; 3&…

Linux - Linux命令大全

阅读前可参考 https://blog.csdn.net/MinggeQingchun/article/details/128547426 一、Linux系统管理 &#xff08;一&#xff09;查看Linux系统版本 1、查看Linux内核版本 1、cat /proc/version&#xff1a;Linux查看当前操作系统版本信息 2、uname -a&#xff1a;Linux查看…

STM32--SPI、I2C、CAND等常用通信外设总线概括

1. SPI SPI是串行外设接口&#xff08; Serial Peripheral Interface&#xff09;的缩写。 SPI&#xff0c;是一种高速的&#xff08;之前做学传输比特115200 112k, 而SPI传输速度为10Mbps&#xff09;&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且在芯片的管…

Allegro如何改变线宽操作指导

Allegro如何改变线宽操作指导 用Allegro做pcb设计的时候,改变走线线宽是非常常用的功能,如下图 线宽目前是12mil,需要把线宽改成15mil 具体操作如下 选择Edit选择Change

摆脱银行询证函的烦恼,契约锁推出银行询证函数字化解决方案

近日&#xff0c;中国财政部会同银保监会印发“财会[2022]39号文件”&#xff0c;明确要加快推进银行函证数字化建设。鼓励具备条件的会计师事务所和银行通过银行函证平台&#xff08;包括第三方函证平台和银行自建函证平台&#xff09;开展数字化函证&#xff0c;有效提升函证…

Jenkins集群配置/并发构建

Jenkins集群配置/并发构建1、集群配置步骤1.1 Jenkins服务器规划1.2 添加节点1.2.1 添加Jenkins-02节点1.2.2 添加Jenkins-03节点1.3 Item配置1.4 执行构建任务测试是否成功集群化构建可以有效提升构建效率&#xff0c;尤其是团队项目比较多或是子项目比较多的时候&#xff0c;…

2023前端调试技巧

前端工作中&#xff0c;不仅编码很重要&#xff0c;重现bug&#xff0c;解决bug的能力同样重要。而这些都离不开代码调试。大厂面试题分享 面试题库前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★地址&#xff1a;前端面试题库PC调试console.log()…

支付宝调用支付流程(沙箱环境)

文章目录实现效果&#xff1a;前提准备支付流程方案一1. 导入依赖2. 配置文件3. 支付宝初始化4. 唤起支付方案二1. 导入依赖2. 唤起支付实现效果&#xff1a; 前提准备 由于本文只是提及支付的流程及其一些相关知识点&#xff0c;所以前提数据自行准备&#xff0c;参考支付宝支…

Micropython ESP32

Micropython ESP32模块列表network模块WIFI STA模式WIFI AP模式machine模块CPU主频GPIO端口GPIO输入模式GPIO输出模式GPIO中断模式ADC模数转换DAC数模转换PWM脉冲宽度调制UART串口Timer定时器官方文档 下载固件 模块列表 network模块 help(network) object <module ‘net…

域名基础知识

1.域名的概念及作用 域名&#xff08;Domain Name&#xff09;&#xff0c;又称网域&#xff0c;是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称&#xff0c;用于在数据传输时对计算机的定位标识&#xff08;有时也指地理位置&#xff09;。 由于IP地址…

vulnhub之PRIME (2021): 2

1.信息收集 输入arp-scan 192.168.239.0/24发现192.168.239.168主机存活。 使用nmap对目标主机192.168.239.168进行端口收集,&#xff0c;发现存活端口&#xff1a;22、80、139、445、10123。 访问http://192.168.239.168/&#xff0c;没有发现可用的信息。 使用gobuster进…

1、Maven——Maven项目管理工具基本设置、把Maven集成到IDEA2022

目录 一、Maven相关参数配置 1、配置依赖&#xff08;jar包&#xff09;存储位置&#xff08;本地仓库&#xff09; 2、 配置依赖下载地址 二、把Maven集成到IDEA2022 一、Maven相关参数配置 1、配置依赖&#xff08;jar包&#xff09;存储位置&#xff08;本地仓库&#…

vue使用echarts 仪表盘样式不对 | 使用echarts5.0

最近在使用Echarts官网样例的仪表盘图时候发现自己用的和官网的样例样式完全不一样。 无论怎么调整参数都还是没有办法解决。如果有同学碰到和我一样的问题可以尝试一下使用最新版的Echarts&#xff08;5.0以上&#xff09;。 因为曾经也怀疑过Echarts版本问题因此npm install…