2201_75340854 2024-03-23 19:36 采纳率: 31.8%
浏览 2

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

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

img

  • 写回答

2条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-03-23 19:36
    关注
    让阿豪来帮你解答,本回答参考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
    
    评论

报告相同问题?

问题事件

  • 创建了问题 3月23日

悬赏问题

  • ¥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 微信的店铺小程序如何修改背景图