有人会这个不,看来看去不会,第一次学这个看书也看不知道,这是观察者模式
2条回答 默认 最新
关注 让阿豪来帮你解答,本回答参考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
解决 无用评论 打赏 举报
悬赏问题
- ¥15 Windows Script Host 无法找到脚本文件"C:\ProgramData\Player800\Cotrl.vbs”
- ¥15 matlab自定义损失函数
- ¥15 35114 SVAC视频验签的问题
- ¥15 impedancepy
- ¥15 求往届大挑得奖作品(ppt…)
- ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
- ¥50 浦育平台scratch图形化编程
- ¥20 求这个的原理图 只要原理图
- ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
- ¥20 微信的店铺小程序如何修改背景图