【2022-08-01】Python面向对象理论(五)

Python面向对象理论(五)

设计模式

设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

设计模式总共有 23 种设计模式。这些模式可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns)。

序号 模式 & 描述 包括
1 创建型模式 这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 工厂模式(Factory Pattern)抽象工厂模式(Abstract Factory Pattern)单例模式(Singleton Pattern)建造者模式(Builder Pattern)原型模式(Prototype Pattern)
2 结构型模式 这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。 适配器模式(Adapter Pattern)桥接模式(Bridge Pattern)过滤器模式(Filter、Criteria Pattern)组合模式(Composite Pattern)装饰器模式(Decorator Pattern)外观模式(Facade Pattern)享元模式(Flyweight Pattern)代理模式(Proxy Pattern)
3 行为型模式 这些设计模式特别关注对象之间的通信。 责任链模式(Chain of Responsibility Pattern)命令模式(Command Pattern)解释器模式(Interpreter Pattern)迭代器模式(Iterator Pattern)中介者模式(Mediator Pattern)备忘录模式(Memento Pattern)观察者模式(Observer Pattern)状态模式(State Pattern)空对象模式(Null Object Pattern)策略模式(Strategy Pattern)模板模式(Template Pattern)访问者模式(Visitor Pattern)
4 J2EE 模式 这些设计模式特别关注表示层。这些模式是由 Sun Java Center 鉴定的。 MVC 模式(MVC Pattern)业务代表模式(Business Delegate Pattern)组合实体模式(Composite Entity Pattern)数据访问对象模式(Data Access Object Pattern)前端控制器模式(Front Controller Pattern)拦截过滤器模式(Intercepting Filter Pattern)服务定位器模式(Service Locator Pattern)传输对象模式(Transfer Object Pattern)

设计模式之单例模式

类加括号调用多次只允许产生一个对象
	class MyClass:
    	pass

    obj1 = MyClass()
    obj2 = MyClass()
    obj3 = MyClass()
    print(id(obj1), id(obj2), id(obj3))  # 2263190030944 2263190494080 2263189844464
    """正常情况下 类名只要加括号实例化产生对象 执行几次就会产生几个不同的对象"""
  	'''有时候我们不希望类频繁的产生不同的对象
  		类中有很多很好用的方法 程序很多地方都需要使用(通过对象调用)
  		如果产生的地方特别多 那么会浪费一定的内存空间 所以需要使用单例
  	'''
	方式1:使用元类干预对象的创建过程
 		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('jason')
     obj2 = Single('kevin')
     obj3 = Single('tony')
     print(id(obj1), id(obj2), id(obj3))
     print(obj1.name)
     print(obj2.name)
     print(obj3.name)

pickle模块

"""
pickle模块与json模块很像 都是用来做序列化 反序列化的
并且pickle模块支持python所有数据类型
但是pickle不支持跨语言传输 只能python自己跟自己玩 兼容性不好 

为了比较方便的编写选课系统 我们需要将对象保存到文件 所以需要用该模块
后续我们不用 因为有更加高级的方法>>>:ORM(对象关系映射)
"""
class MyClass:
    def __init__(self, name):
        self.name = name

    def choice_course(self):
        print('%s正在选课' % self.name)


# 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)
data.choice_course()

选课系统项目分析

选课系统
  角色:学校、学员、课程、讲师
  要求:
    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
posted @ 2022-08-01 19:38  dy12138  阅读(58)  评论(0)    收藏  举报