设计模式
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
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.查看分数
系统架构设计
三层架构
功能展示层
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