python学习系列:python的单体模式实现
最近实现了一个单体模式,来处理一个基于JSON数据结构的任务,发出来希望高手指点。
代码片段
# -*-coding:utf-8-*-
# version:0.2
# 重构,以方便实现在table中增加一行的功能
# simple task manager
import sys
import json
"""
为Task单独实现一个类,这个类就是用来存储数据的,并且只有一份,也就是单体模式;
"""
class TasksSingleton(object):
_instance = None
_taskJson = None
_taskFileName = None
"""为了实现单体的方法,继承object类,重构其__new__函数"""
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
cls.loadFile()
return cls._instance
"""获得当前应该使用的task数据,例如9月份的数据为task9.json"""
@staticmethod
def getFileName():
return "./taskdata/tasks9.json"
"""将文件系统中的jason文件,导入到TasksSingleton类的_taskJson参数中"""
@staticmethod
def loadFile():
try:
global _taskFileName
_taskFileName = TasksSingleton.getFileName()
taskfile = open(_taskFileName, rb)
global _taskJson
_taskJson = json.load(taskfile)
taskfile.close()
except FileNotFoundError:
print("task json file not found.")
sys.exit()
"""将_taskJson中的数据,存储到对应月份的文件中,例如9月份就存储到tasks9.json"""
@staticmethod
def saveFile():
try:
global _taskFileName
global _taskJson
taskfile = open(_taskFileName, w)
json.dump(_taskJson, taskfile)
taskfile.close()
except FileNotFoundError:
print("task json file not found.")
sys.exit()
"""可以不对外体现,我们只需要体现几个操作_taskJson值的函数就可以了"""
@staticmethod
def getTaskJson():
global _taskJson
return _taskJson
"""得到Task表单的表头"""
@staticmethod
def getTasksHeaders():
global _taskJson
return _taskJson["headers"]
"""得到Task的具体内容,有多少行返回多少行,如果为空,返回None"""
@staticmethod
def getTasksRows():
global _taskJson
tasksRows = _taskJson["tasks"]
if len(tasksRows)>0:
return tasksRows
else:
return None
"""将task列表中(i,j)对应的值修改成传入的参数item"""
@staticmethod
def setTaskItem(i, j, item):
global _taskJson
tasksRows = _taskJson["tasks"]
if -1 < i < len(tasksRows) and -1 < j < len(_taskJson["headers"]):
tasksRows[i][j] = item
return True
else:
return False
"""在数据中插入一列新的任务"""
@staticmethod
def insertOneTask(taskContent, deadline):
newTask = [taskContent, "", "", deadline, ""]
print("insert row:", newTask)
global _taskJson
tasksRows = _taskJson["tasks"]
tasksRows.append(newTask)
print(_taskJson)
pass
"""
感觉没有用,反而将程序变复杂了,我先按照没用来处理,看后续学习单体模式以后,再理解
为Task单独实现一个类,这个类就是用来存储数据的,并且只有一份,也就是单体模式
"""
class Tasks(object):
__metaclass__ = TasksSingleton()
@staticmethod
def getfilename():
print("file is here.")
疑问
在网上搜到说,python的单体模式,要在一个单体结构中实现__new__(cls)函数,而后实现一个类,其metaclass要初始化为这个单体的实例; 但是我实现的时候,感觉后边这个类没什么用,不知道是否理解有误。
下一篇:
数据结构——二叉树相关练习题
