有人会这个不,看来看去不会,第一次学这个看书也看不知道,这是观察者模式

关注让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言问题:什么是观察者模式?它有什么作用? 回答: 观察者模式是一种行为模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个目标对象,当目标对象发生变化时,会自动通知所有观察者对象,让它们能够及时更新自己的状态。 观察者模式常用于需要把复杂的系统解耦的情况下,让各个模块之间的关系更加简单清晰。例如,在一个大型的软件项目中,一个模块的状态变化可能会引起其他多个模块的响应,使用观察者模式可以使得各个模块彼此独立,不会相互影响,代码结构更加清晰、易于维护。 案例: 假设我们有一个在线书店,我们的用户可以在网站上购买各种不同的图书。当用户完成一笔订单时,我们需要及时将订单信息发送给管理员和财务部门进行处理。 使用观察者模式可以帮助我们实现这个功能。我们可以定义一个订单类作为目标对象,然后定义两个观察者类分别代表管理员和财务部门,当订单类发生变化时,它会自动通知这两个观察者类进行处理。 代码示例:
# 定义一个订单类作为目标对象
class Order:
def __init__(self, order_id, customer_name, book_id, price):
self.order_id = order_id
self.customer_name = customer_name
self.book_id = book_id
self.price = price
self.observers = []
# 添加观察者
def attach(self, observer):
self.observers.append(observer)
# 删除观察者
def detach(self, observer):
self.observers.remove(observer)
# 通知所有观察者进行更新
def notify(self):
for observer in self.observers:
observer.update(self)
# 改变订单状态并通知观察者
def set_status(self, status):
self.status = status
self.notify()
# 定义一个管理员类作为观察者
class Admin:
def update(self, order):
print(f"管理员收到新订单:订单号{order.order_id},客户名{order.customer_name},图书编号{order.book_id},价格{order.price}")
# 定义一个财务部门类作为观察者
class Finance:
def update(self, order):
print(f"财务部门收到新订单:订单号{order.order_id},客户名{order.customer_name},图书编号{order.book_id},价格{order.price}")
# 创建一个订单实例
order = Order(1001, "张三", "Python入门", 29.99)
# 创建两个观察者实例(管理员和财务部门)
admin = Admin()
finance = Finance()
# 将观察者添加到目标对象中
order.attach(admin)
order.attach(finance)
# 改变订单状态,触发通知
order.set_status("已支付")
以上代码的运行结果为:
管理员收到新订单:订单号1001,客户名张三,图书编号Python入门,价格29.99
财务部门收到新订单:订单号1001,客户名张三,图书编号Python入门,价格29.99