`n
观察者模式是一种设计模式,允许一个对象(被观察者)在其状态改变时通知所有依赖于它的对象(观察者)。在Ruby中实现这一模式,可以通过使用简单的类结构和回调方法来达到目的。
首先需要定义被观察者类,这个类应该维护一个观察者列表,并实现增加、删除观察者的方法。同时,它需包含一个用于通知所有观察者的机制,将信息传递给它们。
```rubyclass Subject def initialize @observers = [] end def attach(observer) @observers << observer end def detach(observer) @observers.delete(observer) end def notify @observers.each(&:update) endend```接下来,定义观察者类。观察者应实现一个更新方法,以便在被观察者通知时执行相应操作。
```rubyclass Observer def update puts "Observer notified!" endend```然后可以创建一个被观察者实例和若干观察者实例,并将观察者注册到被观察者上。状态变化时,调用通知方法将通知所有观察者。
```rubysubject = Subject.newobserver1 = Observer.newobserver2 = Observer.newsubject.attach(observer1)subject.attach(observer2)# 触发状态改变时,通知观察者subject.notify```以上代码展示了如何将观察者添加到被观察者中,并在被观察者的状态变化时通知所有观察者。
为了增强实用性,可以在观察者类中加入更多功能。例如,观察者可以接收信息并根据被观察者的状态执行不同操作。
```rubyclass Observer def update(message) puts "Observer notified with message: #{message}" endend```这时,通知方法需更改,使其能够传递信息给观察者。
```rubydef notify(message) @observers.each { |observer| observer.update(message) }end```使用这个更灵活的策略后,可以在被观察者状态改变时附加信息到通知中,提高了消息的针对性和有效性。
观察者模式非常适用于事件驱动的环境,例如用户接口交互或状态变化通知。实现简单且易于扩展,使得增加新观察者变得轻而易举。