设计模式之单例模式与pickle模块与选课系统架构

设计模式

1.什么是设计模式
针对固定的一些问题设计出了固定解决套路,总共有23种

2.设计模式分三类
创造类:
共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式
结构类:
共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式
行为类:
共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式

4.设计模式之单例模式
类加括号调用多次只允许产生一个对象
class MyClass:
    pass

obj1 = MyClass()
obj2 = MyClass()
obj3 = MyClass()
print(id(obj1), id(obj2), id(obj3))  # 2263190030944 2263190494080 2263189844464
'''
类名加括号实例化产生对象,执行几次就会产生几个不同的对象,而有时候,我们不需要类频繁的产生不同的对象,程序中很多都会用到类,但产生的对象特别多,就会浪费一定的内存空间,这时候就需要使用单例
'''
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('barry')
obj2 = Single('harry')
print(obj1.name)
# barry
print(obj2.name)
# barry
img

pickle模块

'''
pickle模块与json模块一样,都是用来将数据序列化、反序列化的
不同的是pickle模块支持python所有数据类型
但pickle模块不支持跨语言
'''
class MyClass:
    def __init__(self, name):
        self.name = name

    def choice_course(self):
        print(f'{self.name}s正在选课')

'将对象保存到文件,并且将来取出之后还可以通过句点符随意调用'
obj = MyClass('jason')
# 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)
print(data.name)  # 打印保存到文件里的name

选课系统项目分析

选课系统
  角色:学校、学员、课程、讲师
  要求:
    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.查看分数
img

系统架构设计

三层架构
	功能展示层
    	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
posted @ 2022-08-01 20:58  无言以对啊  阅读(43)  评论(0)    收藏  举报