• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >ruby > 设计模式中的观察者模式在Ruby编程中的运用实例解析

设计模式中的观察者模式在Ruby编程中的运用实例解析

作者: 字体:[增加 减小] 来源:互联网

通过本文主要向大家介绍了观察者设计模式,java观察者设计模式,设计模式 观察者模式,c#观察者设计模式,设计模式中观察者模式等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

观察者模式(有时又被称为发布/订阅模式)是软件设计模式的一种。
在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。
这通常透过呼叫各观察者所提供的方法来实现。

实现观察者模式的时候要注意,观察者和被观察对象之间的互动关系不能
体现成类之间的直接调用,否则就将使观察者和被观察对象之间紧密的耦合起来,
从根本上违反面向对象的设计的原则。无论是观察者“观察”观察对象,
还是被观察者将自己的改变“通知”观察者,都不应该直接调用。

通俗点说就是A对象(被观察)通知另一个(一些)对象(观察者)自己发生改变了,改变了什么,至于你们这些对象要做什么就不关我的事了,你们自己做去吧!耦合度就此降低了。。。

下面的例子使用ruby的module实现了较为传统的观察者模式。使用module的好处是:subject类可能是其他基类的子类,mixin实现了类似多继承的效果。

module Subject
 def initialize
  @observers = []
 end

 def add_observer ob
  @observers << ob
 end

 def delete_observer ob
  @observers.delete ob
 end

 def notify_observers
  @observers.each do |ob|
   ob.update self
  end
 end
end

class Employee
 include Subject
 attr_reader :name, :title
 attr_reader :salary

 def initialize name, title, salary
  super()
  @name = name
  @title = title
  @salary = salary
 end

 def salary=new_salary
  @salary = new_salary
  notify_observers
 end
end

class Taxman
 def update obj
  puts "#{obj.name} now has a salary of #{obj.salary}"
 end
end

jack = Employee.new('jack', 'prgramer', 3000)
jack.add_observer(Taxman.new)
jack.salary = 3000

</div>

我们可以自己实现Subject module,不过这样做有些画蛇添足,因为ruby核心库本身就包含了Observable模块,我们只需要将其mixin代码既可。

require 'observer'

class Employee
 include Observable

 attr_reader :name, :title, :salary

 def initialize name, title, salary
  @name = name
  @title = title
  @salary = salary
 end 

 def salary=(new_salary)
  @salary = new_salary
  changed
  notify_observers(self)
 end # salary=
end # Employee

</div>

在notify_observers之前必须先调用changed方法,表示确实发生了改变,否则notify_observers方法是无效的。

</div>

您可能想查找下面的文章:

  • 设计模式中的观察者模式在Ruby编程中的运用实例解析

相关文章

  • ruby判断一个数是否为质数(素数)示例
  • Ruby实现批量对文件增加前缀代码分享
  • Ruby基本的环境变量设置以及常用解释器命令介绍
  • 深入理解Ruby on Rails中的缓存机制
  • 什么是ruby和Ruby概述
  • Ruby中的反射(Reflection)应用实例
  • Ruby中的return、break、next详解
  • Ruby连接使用windows下sql server数据库代码实例
  • Ruby的25个编程细节(技巧、实用代码段)
  • Windows下安装配置Ruby的debug工具ruby-debug-base19

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Ruby中的循环语句的用法教程
    • rails 连接mysql的问题解决
    • ruby 类常量 解析
    • Ruby实现的3种快速排序算法
    • Ruby on Rails基础之新建项目
    • Windows下安装配置Ruby的debug工具ruby-debug-base19
    • ruby 正则表达式详解及示例代码
    • Ruby on Rails中jquery_ujs组件拖慢速度的问题解决
    • Ruby中对一元操作符重载实例
    • rudy 继承 概念

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有