三层体系、设计模式
2022-07-20 本文已影响0人
李霖弢
栈和队列
栈:先进后出
队列:先进先出
三层体系
三层体系是逻辑上的三层,不一定是在三台机器。
- 数据层(持久层)
不包含业务逻辑,其函数均为对数据库的操作。 - 业务逻辑层
负责处理具体业务,并对数据层进行调用。 - 界面层(表现层)
用于与用户交互,显示数据并接受用户操作
设计模式
单例模式
保证在当前进程中,某个类仅有一个实例
注意在 Web Server 等多线程环境中,为防止多个线程同时进入了该实例化方法导致创建了多个实例,应使用线程锁
class RedisClientInstance(object):
# 线程锁
_instance_lock = threading.Lock()
@classmethod
def get_storage_instance(cls):
if not hasattr(RedisClientInstance,'_instance'):
with RedisClientInstance._instance_lock:
RedisClientInstance._instance = RedisClient(host=CommonConfig.redis_host,
port=CommonConfig.redis_port,
password=CommonConfig.redis_password,
db=CommonConfig.redis_position_db)
return RedisClientInstance._instance
观察者模式
一对多的依赖关系,当被观察者发生变化时,所有依赖他的对象都会收到通知
生产消费者模式
通过一个容器(队列)实现生产者和消费者(支持多对多)解耦
当容器为空的时候,消费者必须等待,而容器满的时候,生产者必须等待。其他场合可以认为动态平衡。
订阅发布模式
订阅发布模式是一对多的特殊的生产消费者模式,也符合观察者模式。
- 发布者是生产者,发布者不直接将消息发送给订阅者,而是将消息分为不同的类别
- 订阅者是消费者,订阅者只接收一个或多个感兴趣的消息
- 发布者和订阅者直接无需直接产生关系,通常通过消息队列,异步实现
依赖注入
在类A需要调用类B协助时,不在A中创建B实例,而是依赖于外部的注入,以实现AB类的解耦。
b = B()
a = A(b)
控制反转
控制反转就是把程序执行过程由原来的程序员控制转向由框架来控制,这也是框架与库(lib)最关键的区别。
在别人定义的回调函数中写代码就是一个控制反转的典型场景。
- 控制注入
控制注入就是在依赖注入的场景下使用控制反转,即注入的内容不由程序员手动指定,而是框架代为指定。