Ruby设计模式-观察者模式学习笔记

observer.rb
#!/bin/env ruby
# encoding: utf-8
require 'observer'

class
CriminalMovement include Observable attr_reader :criminal def initialize(criminal) @criminal = criminal end def action(msg) changed notify_observers(criminal, msg) end end class Criminal attr_reader :name def initialize(name) @name = name end end class FbiMovement attr_reader :fbi def initialize(fbi) @fbi = fbi end def update(criminal, msg) p criminal.name + msg + ': ' + fbi.name + '收到' end end class Fbi attr_reader :name def initialize(name) @name = name end end # 卧底 class Dinting def self.run crmn1 = Criminal.new('黑狗') crmn2 = Criminal.new('黑虎') fbi1 = Fbi.new('飞鹰1号') fbi2 = Fbi.new('飞鹰2号') fbi1_observer = FbiMovement.new(fbi1) fbi2_observer = FbiMovement.new(fbi2) crinimal1_observer = CriminalMovement.new(crmn1) crinimal2_observer = CriminalMovement.new(crmn2) fbi_observers = [fbi1_observer, fbi2_observer] crinimal_observers = [crinimal1_observer, crinimal2_observer] fbi_observers.each do |fbi_o| crinimal_observers.each do |cri_o| cri_o.add_observer(fbi_o) end end crinimal1_observer.action('今天凌晨2点,南河小巷抢劫') crinimal2_observer.action('明天凌晨2点,爱河毒品交易') end end Dinting.run

程序运行结果:

"黑狗今天凌晨2点,南河小巷抢劫: 飞鹰1号收到"
"黑狗今天凌晨2点,南河小巷抢劫: 飞鹰2号收到"
"黑虎明天凌晨2点,爱河毒品交易: 飞鹰1号收到"
"黑虎明天凌晨2点,爱河毒品交易: 飞鹰2号收到"

猜你喜欢

转载自www.cnblogs.com/amanda-meng/p/9928233.html