pyqt的工厂窗口单例(python单例模式的使用)
在使用到多个窗口时,往往需要进行窗口通讯,和窗口跳转,但是每次窗口跳转时都重新创建的话,一个是会不利于窗口通讯,再一个是不利于管控,这是我们可以将所有的窗口都由一个对象来进行创建,而且这个对象也只能被创建一次,也就是接下来所说的工厂单例(可以将窗口的创建理解为产品,而创建窗口的对象为工厂,只不过这个工厂是唯一的,而且这个工厂每种东西只生产一样)工厂模式实现代码如下:#!/AME/OMOstep4/
·
在使用到多个窗口时,往往需要进行窗口通讯,和窗口跳转,但是每次窗口跳转时都重新创建的话,一个是会不利于窗口通讯,再一个是不利于管控,这时我们可以将所有的窗口都由一个对象来进行创建,而且这个对象也只能被创建一次,也就是接下来所说的工厂单例(可以将窗口的创建理解为产品,而创建窗口的对象为工厂,只不过这个工厂是唯一的,而且这个工厂每种东西只生产一样)
实现代码如下:
#!/AME/OMOstep4/phtest python
# _*_ conding:utf-8 _*_
# @TIME : 2021-06-15 01:32
# @Author : lizi
# @File : factortest
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import os
import sys
from enum import Enum#加载枚举模块
#测试加入的窗口模块
from widtest.qss1 import *
class wid_enum(Enum):
LOGWID = 0
REGWID = 1
#窗口工厂模式创建
class wid_factor(object):
obj = None #对象第一次为None
def __new__(cls, *args, **kwargs): # 单例模式
if cls.obj is None: # 如果对象为None
cls.obj = super().__new__(cls) # 就创建一个对象
return cls.obj # 否则直接返回
def __init__(self):
self.creat_wid()
#创建窗口
def creat_wid(self):
self.qss1wid = logwidge() #此对象为已经创建好的窗口类
#返回唯一窗口
def getwid(self,type):
print(type)
if type == wid_enum.LOGWID:
return self.qss1wid
# @classmethod
# def sigton(cls):
# if not cls.__instance:
# cls.__instance = cls()
# return cls.__instance
if __name__ == "__main__":
app = QApplication(sys.argv)#创建一个应用程序
widfactor = wid_factor()
widfactor2 = wid_factor()
#测试工厂是否只有一个
print(id(widfactor))
print(id(widfactor2))
#测试工厂生产的产品是否唯一
print(id(widfactor.getwid(wid_enum.LOGWID)))
print(id(widfactor2.getwid(wid_enum.LOGWID)))
sys.exit(app.exec())#开始执行应用程序,并进入消息循环,调用程序并转移进程
实现效果
测试发现工厂和产品的创建都是唯一的,所以此时的工厂单例模式完成
总结:python的单例框架
#基本创建
class singleton_object(object):
obj = None #对象第一次为None
def __new__(cls, *args, **kwargs): # 单例模式
if cls.obj is None: # 如果对象为None
cls.obj = super().__new__(cls) # 就创建一个对象
return cls.obj # 否则直接返回
def __init__(self):
pass
#使用
sigle = singleton_object()
更多推荐
所有评论(0)