1.种类:23种
2.分类
2.1 创建型
2.2 结构型
2.3 行为型
3.设计模式之例模式(对此产生对象 产生的对象只有一个)
3.1 通过元类的方式使每次产生的对象都是同一个(产生第一个对象时获取该对象并做记录后返回该对象,之后再产生对象进行判断,已记录过产生直接返回该对象)
# 使用元类 class MyClass(type): school = '南芜大学' # 产生空对象 # 用变量记录是否产生过新对象 instance = None def __call__(self, *args, **kwargs): # 判断变量中是否产生了对象 if self.instance: return self.instance # 获取空对象 obj = super().__call__() # 记录已生成对象 self.instance = obj # 返回空对象 return obj # 使用自己创建的元类并给产生的对象添加数据 class MySchool(metaclass=MyClass): def __init__(self): pass stu1 = MySchool() print(stu1.__dict__) print(id(stu1)) # 1961728781320 stu2 = MySchool() print(stu2.__dict__) print(id(stu2)) # 1961728781320
1.写入文件
pickle.dump(stu2.__dict__, f)
f.write(pickle.dumps(stu2.__dict__))
2.读取文件
pickle.load(f)
class School(object): school = '南芜大学' def __init__(self, name, age): self.name = name self.age = age def major(self): print('该专业很好') stu1 = School('jason', 18) print(stu1.__dict__) print(id(stu1)) # 1443415255624 stu2 = School('kevin', 22) print(stu2.__dict__) print(id(stu2)) # 1443415253128 import os base_path = os.path.dirname(__file__) file_path = os.path.join(base_path, 'pickle.txt') import pickle with open(file_path, 'wb') as f: pickle.dump(stu2.__dict__, f) with open(file_path, 'rb')as f: user_info = pickle.load(f) print(user_info) # {'name': 'kevin', 'age': 22}
选课系统 角色:学校、学员、课程、讲师 要求: 1. 创建北京、上海 2 所学校 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开 3. 课程包含,周期,价格,通过学校创建课程 4. 通过学校创建班级, 班级关联课程、讲师5. 创建学员时,选择学校,关联班级 5. 创建讲师角色时要关联学校, 6. 提供三个角色接口 6.1 学员视图, 可以注册, 交学费, 选择班级, 6.2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩 6.3 管理视图,创建讲师, 创建班级,创建课程 7. 上面的操作产生的数据都通过pickle序列化保存到文件里
1.功能分析
1.1 管理员视图
管理员注册功能
管理员登录功能
管理员创建学校功能
管理员创建讲师功能
管理员创建课程功能
1.2 教师视图
教师登录功能
教师选择教授课程功能
教师查看教授课程功能
教师查看学生信息功能
教师管理学生成绩功能
1.3 学生视图
学生注册功能
学生登录功能
学生缴纳学费功能
学生选择课程功能
2.架构设计
2.1 三层架构
第一层:视图层
scr.py
admin_view.py(管理员视图)
teacher_view.py(教师视图)
student_view.py(学生视图)
第二层:核心逻辑层
admin_interface.py(管理员核心逻辑层 )
teacher_interface.py(教师核心逻辑层)
student_interface.py(学生核心逻辑层)
第三层:数据信息层
db_hanlder.py(读取文件数据)
model.py(类)
Admin(管理员信息存储文件夹)
Teacher(教师信息存储文件夹)
Student(学生信息存储文件夹)
1.管理员注册功能逻辑
1.1 第一层:1、在管理员视图层获取用户信息(包含用户名及密码)密码输两次,判断两次密码是否一致,导入第二层核心逻辑层并传入用户名及密码
第二层:1、在核心逻辑层判断用户是否存在(需要获得文件路径 )
2、在配置文件中获取根目录路径并拼接出db文件路径(配置文件中变量名大写)
3、在核心逻辑层给models文件中创建的类的读取文件方法中传入用户输入的用户名
4、根据models文件中读取文件返回的数据获得用户信息,判断文件是否存在,存在返回用户已存在,不存在反正注册返回注册成功
第三层 1、在db文件夹下的models文件中创建产生管理员数据的类,在产生的对象中增加姓名及密码信息
2、根据创建的类采用对象点__class__点__name__获得类名
3、然后和settings文件中的db文件路径拼接出存储管理员信息文件的文件夹
4、再根据对象点名字获得用户名拼接相互用户文件目录
5、将产生的对象数据保存到db_handle文件中,采用的是pickle模块写入文件中
6、在models文件产生管理员数据的类中采用装饰器@classmethod采用类名点k值得方式得到姓名v值
7、在db_handle文件中根据创建的类采用类名点__name__获得用户名拼接出文件路径判断是否存在
8、采用pickle模块读取文件信息后返回该用户信息