Ruby设计模式编程中对外观模式的应用实例分析

 更新时间:2016年03月16日 16:41:16   作者:范孝鹏  
这篇文章主要介绍了Ruby设计模式编程中对外观模式的应用实例分析,外观模式在Ruby on Rails开发项目中也经常被用到,需要的朋友可以参考下

何为外观模式?

    外观模式为子系统中一组不同的接口提供统一的接口。外观定义了上层接口,通过降低复杂度和隐藏子系统间的通信以及依存关系,让子系统更加易于使用。

    比方说子系统中有一组不同的类,其中一些彼此依赖。这让客户端难以使用子系统中的类,因为客户端需要知道每一个类。外观起到整个子系统的入口。有些客户端只需要子系统的某些基本行为,而对子系统的类不做太多定制,外观为这样的客户端提供简化的接口。只有需要从某些子系统的类定制更多行为的客户端,才会关注外观背后的细节。

    外观模式:为系统中的一组接口提供一个统一的接口。外观定义一个高层接口,让子系统更易于使用。

何时使用外观模式?

  •     子系统正逐渐变得复杂。应用模式的过程中演化出许多类,可以使用外观为这些子系统提供一个较简单的接口。
  •     可以使用外观对子系统进行分层。每个子系统级别有一个外观作为入口点。让它们通过其外观进行通信,可以简化它们的依赖关系。

Ruby版外观模式应用
需求:

股民买卖股票

初步代码:

# -*- encoding: utf-8 -*-

#股票1
class Stock1
  def buy
    puts '股票1买入'
  end
  
  def sell
    puts '股票1卖出'
  end
end

#股票2
class Stock2
  def buy
    puts '股票2买入'
  end
  
  def sell
    puts '股票2卖出'
  end
end

#股票3
class Stock3
  def buy
    puts '股票3买入'
  end
  
  def sell
    puts '股票3卖出'
  end
end

#国债1
class NationalDebt1
  def buy
    puts '国债1买入'
  end
  
  def sell
    puts '国债1卖出'
  end
end

#房地产1
class Realty1
  def buy
    puts '房地产1买入'
  end
  
  def sell
    puts '房地产1卖出'
  end
end
s1 = Stock1.new
s2 = Stock2.new
s3 = Stock3.new
n1 = NationalDebt1.new
r1 = Realty1.new

s1.buy
s2.buy
s3.buy
n1.buy
r1.buy

s1.sell
s2.sell
s3.sell
n1.sell
r1.sell

问题:

可以发现用户需要了解股票、国债、房产情况,需要参与这些项目的具体买和卖,耦合性很高。

改进代码

# -*- encoding: utf-8 -*-

#股票1
class Stock1
  def buy
    puts '股票1买入'
  end
  
  def sell
    puts '股票1卖出'
  end
end

#股票2
class Stock2
  def buy
    puts '股票2买入'
  end
  
  def sell
    puts '股票2卖出'
  end
end

#股票3
class Stock3
  def buy
    puts '股票3买入'
  end
  
  def sell
    puts '股票3卖出'
  end
end

#国债1
class NationalDebt1
  def buy
    puts '国债1买入'
  end
  
  def sell
    puts '国债1卖出'
  end
end

#房地产1
class Realty1
  def buy
    puts '房地产1买入'
  end
  
  def sell
    puts '房地产1卖出'
  end
end

#基金类
class Fund
  attr_accessor s1, s2, s3, n1, r1
  
  def initialize
    s1 = Stock1.new
    s2 = Stock2.new
    s3 = Stock3.new
    n1 = NationalDebt1.new
    r1 = Realty1.new
  end
  
  def buy
    s1.buy
    s2.buy
    s3.buy
    n1.buy
    r1.buy
  end
  
  def sell
    s1.sell
    s2.sell
    s3.sell
    n1.sell
    r1.sell
  end
end

f1 = Fund.new
f1.buy
f1.sell

好处:用户不需要了解各种股票,只需购买卖出基金即可。

相关文章

  • Ruby简明教程之循环语句介绍

    Ruby简明教程之循环语句介绍

    这篇文章主要介绍了Ruby简明教程之循环语句介绍,非常简洁的讲解,可以作为语法备忘,需要的朋友可以参考下
    2014-06-06
  • ruby 类常量 解析

    ruby 类常量 解析

    ruby 类常量 解析...
    2007-11-11
  • Ruby生成随机数的方法总结

    Ruby生成随机数的方法总结

    在本文里小编给大家分享的是关于Ruby生成随机数的知识点方法,有需要的朋友们可以学习下。
    2019-01-01
  • 使用Ruby re模块创建复杂的正则表达式

    使用Ruby re模块创建复杂的正则表达式

    复杂的正则表达式很难构建,甚至很难阅读。Ruby的Re模块可以帮助你利用简单的表达式构建复杂的正则表达式
    2014-03-03
  • 简单介绍Ruby on Rails对PostgreSQL数组类型的支持

    简单介绍Ruby on Rails对PostgreSQL数组类型的支持

    这篇文章主要介绍了简单介绍Ruby on Rails对PostgreSQL数组类型的支持,Rails框架从4.0以后对PG的数组提供了支持,需要的朋友可以参考下
    2015-04-04
  • Ubuntu系统安装Ruby语言的三种方法

    Ubuntu系统安装Ruby语言的三种方法

    这篇文章主要介绍了Ubuntu系统安装Ruby语言的三种方法,本文讲解了使用apt-get安装、使用brightbox ppa仓库安装、使用RVM安装3种方法,需要的朋友可以参考下
    2015-01-01
  • ruby中 %W{}和%w{}的使用案例详解

    ruby中 %W{}和%w{}的使用案例详解

    %w{}是Ruby中的一种快捷方式,用于创建一个以空格分隔的字符串数组,在使用 %w 时,Ruby 会将字符串中的空格作为分隔符,将其拆分成一个字符串数组,这篇文章主要介绍了ruby中%W{}和%w{}的使用,需要的朋友可以参考下
    2023-06-06
  • 简要解读Ruby面向对象编程中的作用域

    简要解读Ruby面向对象编程中的作用域

    作用域在面向对象编程中是一个十分重要的概念,程序构建时必须要理解清楚类和方法以及对象的作用范围,接下来就为大家简要解读Ruby面向对象编程中的作用域
    2016-05-05
  • 使用Ruby实现FTP密码破解

    使用Ruby实现FTP密码破解

    本文给大家详细讲解了如何使用ruby来实现FTP的暴力破解,记录了破解器从思路到最终实现的全部过程,原理其实很简单,就是利用多线程调用相应的字典进行穷举测试,有需要的小伙伴可以参考下
    2017-04-04
  • Rails脚手架使用实例

    Rails脚手架使用实例

    这篇文章主要介绍了Rails脚手架使用实例,通过8个步骤来实现一个完整案例,需要的朋友可以参考下
    2014-06-06

最新评论