【设计单例模式、Pickle模块、选课系统分析】

本文探讨了Python中的设计模式,特别是单例模式,展示了如何确保类只有一个实例。同时,讲解了Pickle模块在序列化和反序列化中的应用,以及其在Python数据类型支持上的限制。接着,文章分析了一个选课系统的项目需求,包括角色定义、功能需求和数据存储。最后,提出了基于三层架构的系统设计,涵盖了管理员、讲师和学生角色的视图及接口。
摘要由CSDN通过智能技术生成

一、设计模式

	如果理解设计模式?
		在IT行业有很多前辈针对规定的难听设计出了固定的解决思路方法
	设计模式总共多少种?
		设计模式总共有23种 具体请查看百度(单例模式)
	设计模式的分类
		创建型	结构型	行为型

二、设计模式之单例模式

	'''类加括号调用多次只允许产生一个对象'''
	
			class MyClass:
				pass
			obj1 = MyClass()		# 140623403648624	
		    obj2 = MyClass()		# 140622598028640
		    obj3 = MyClass()		# 140623403563136
		    print(id(obj1), id(obj2), id(obj3)) 
		    
	'''我们可以看出来调用之后都是各自 不是同一个对象 我们想节省内存就需要用到单例模式'''
		
			class MyMeTaClass(type):
			    # 记录类是否已经创建了对象
			    instance = None

				def __call__(self, *args, **kwargs):
				    if self.instance:
				        return self.instance
				    obj = super().__call__(*args, **kwargs)    # 获取空对象
				    self.instance = obj         # 保存对象
				    return obj          # 返回空对象
			
			class Single(metaclass=MyMeTaClass):
			    def __init__(self, name):
			        self.name = name

			obj1 = Single('LebronJames')
			obj2 = Single('DwightHoward')
			print(id(obj1), id(obj2))		# 140540725395360 140540725395360
			print(obj1.name)	# LebronJames
			print(obj2.name)	# LebronJames
			

在这里插入图片描述

三、Pickle模块

	pickle模块与json模块很像 都是用来做序列化 反序列化的
	并且pickle模块支持python所有数据类型(保存的文件都是二进制)
	但是pickle不支持跨语言传输 只能python自己跟自己玩 兼容性不好 
		class MyClass:
		    def __init__(self, name):
		        self.name = name
		
		    def choice_course(self):
		        print('%s正在playBasketball' % self.name)

		obj = MyClass('LebronJames')
		# 需求:将对象保存到文件 并且将来取出之后还可以通过句点符随意调用
		with open(r'a.txt', 'w', encoding='utf8') as f:
		    f.write(obj)  # 常规的文件操作不行

		import json
		with open(r'a.txt', 'w', encoding='utf8') as f:
		    f.write(json.dumps(obj))  # json模块也不行
		    
		import pickle
		with open(r'a.txt', 'wb') as f:
		    f.write(pickle.dumps(obj))
		    # pickle.dumps(obj, f)
		
		with open(r'a.txt', 'rb') as f:
		    data = pickle.load(f)
		print(data)		# <__main__.MyClass object at 0x7fb8080b7f10>
		print(data.name)	# LebronJames
		data.choice_course()	# LebronJames正在playBasketball

四、选课系统项目分析

	选课系统
	  角色:学校、学员、课程、讲师
	  要求:
	    1. 创建北京、上海 2 所学校
	    2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开
	    3. 课程包含,周期,价格,通过学校创建课程 
	    4. 通过学校创建班级, 班级关联课程、讲师5. 创建学员时,选择学校,关联班级
	    5. 创建讲师角色时要关联学校, 
	    6. 提供三个角色接口  
	    	6.1 学员视图, 可以注册, 交学费, 选择班级,  
	    	6.2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩   
	    	6.3 管理视图,创建讲师, 创建班级,创建课程
	    7. 上面的操作产生的数据都通过pickle序列化保存到文件里
	    
	    功能分析
			管理员功能(最核心)
		    	1.注册
		       2.登录
		       3.创建讲师
		   		4.创建学校
		       5.创建课程
			讲师功能
		    	1.注册
		       2.登录
		    	3.选择教授课程
		       4.查看教授课程
		    	5.管理课程分数
		 	学生功能
		    	1.注册
		       2.登录
		    	3.选择学校
		       4.选择课程
		   		5.查看分数

五、系统架构设计

	三层架构
		功能展示层
	    	src.py
	       admin_view.py
	    	teacher_view.py
	       student_view.py
	   	核心逻辑层
	    	admin_interface.py
	       teacher_interface.py
	    	student_interface.py
	    数据处理层
	    	db_hanlder.py
	       model.py
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LoisMay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值