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

何为外观模式?

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

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

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

何时使用外观模式?

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

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元编程 第2版 pdf、ruby编程语言 pdf、ruby编程语言、ruby元编程、ruby元编程第二版 pdf,以便于您获取更多的相关知识。

时间: 2024-07-28 13:49:20

Ruby设计模式编程中对外观模式的应用实例分析_ruby专题的相关文章

C++设计模式编程中Facade外观模式的使用实例解析_C 语言

外观模式提供了一个统一的接口,用来访问子系统的一群接口.外观定义了一个高层接口,让子系统更容易使用.外观模式让接口变得简单,简化了子系统的接口.外观模式十分简单,简而言之,就是简化你的类的接口,将一系列的复杂的过程封装到内部,对外只提供最简单的接口.结构图: 适用场景:当你要为一个复杂子系统提供一个简单接口时.子系统往往因为不断演化而变得越来越复杂.大多数模式使用时都会产生更多更小的类.这使得子系统更具可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难.F

实例解析Ruby设计模式编程中Strategy策略模式的使用_ruby专题

今天你的leader兴致冲冲地找到你,希望你可以帮他一个小忙,他现在急着要去开会.要帮什么忙呢?你很好奇. 他对你说,当前你们项目的数据库中有一张用户信息表,里面存放了很用户的数据,现在需要完成一个选择性查询用户信息的功能.他说会传递给你一个包含许多用户名的数组,你需要根据这些用户名把他们相应的数据都给查出来. 这个功能很简单的嘛,你爽快地答应了.由于你们项目使用的是MySQL数据库,你很快地写出了如下代码: require 'mysql' class QueryUtil def find_us

深入剖析Ruby设计模式编程中对命令模式的相关使用_ruby专题

命令模式是对象行为型使用率比较高的设计模式,别名:Action(动作),Transaction(事务) 意图: 将一个请求封装为一个对象,从而使你可对不同的请求进行参数化:对请求排队或记录请求日志,以及支持可取消的操作 这里所谓的"不同的请求"也既意味着请求可能发生的变化,是一个可能扩展的功能点. 动机: 方便扩展 结构: 协作说明:    参与角色:     Command 声明一个接口以用来实现某个操作.     ConcreteCommand 将动作与Reciver对外绑定,通过

Ruby和Ruby on Rails中解析JSON格式数据的实例教程_ruby专题

Ruby解析JSON Ruby解析Json例子: json = '["a", "B", "C"]' puts "Unsafe #{unsafe_json (json).inspect}" #输出Unsafe ["a", "B", "C"] Ruby解析Json把上面的json字符串解析成Array.这样的方法并不安全,比如: json = 'puts "Da

C++设计模式编程中proxy代理模式的使用实例_C 语言

代理模式典型的结构图为: 实际上,代理模式的想法非常简单. 代理模式的实现: 完整代码示例(code):代理模式的实现很简单,这里为了方便初学者的学习和参考,将给出完整的实现代码(所有代码采用 C++实现,并在 VC 6.0 下测试运行). 代码片断 1:Proxy.h //Proxy.h #ifndef _PROXY_H_ #define _PROXY_H_ class Subject{ public: virtual ~Subject(); virtual void Request() =

详解组合模式的结构及其在Ruby设计模式编程中的运用_ruby专题

定义:也叫合成模式,或者部分-整体模式,主要是用来描述部分与整体的关系,定义,将对象组合成树形结构以表示"部分-整体"的层次结构,使得用户对单个对象和组合对象的使用具有一致性. 类图: 角色说明: Componnent抽象构件角色:定义参加组合对象的共有方法和属性,可以定义一些默认的行为或属性. Leaf叶子构件:叶子对象,其下再也没有其他的分支,也就是遍历的最小单位. Composite树枝构件:树枝对象,它的作用是组合树枝节点和叶子节点形成一个树形结构. 实例:听说你们公司最近新推

详解C++设计模式编程中对状态模式的运用_C 语言

状态模式:当一个对象的内在状态发生变化时,允许改变其行为,这个对象看来像是改变了其类. 状态模式与策略模式的UML图几乎一模一样,下面列举了两者的不同: (1)可以通过环境类状态的个数来决定是使用策略模式还是状态模式. (2)策略模式的环境类自己选择一个具体策略类,具体策略类无须关心环境类:而状态模式的环境类由于外在因素需要放进一个具体状态中,以便通过其方法实现状态的切换,因此环境类和状态类之间存在一种双向的关联关系. (3)使用策略模式时,客户端需要知道所选的具体策略是哪一个,而使用状态模式时

详解Java的设计模式编程中的原型模式_java

定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象.类型:创建类模式类图: 原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype.Prototype类需要具备以下两个条件: 实现Cloneable接口.在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法.在java虚拟机中,只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException

详解Java设计模式编程中的访问者模式_java

定义:封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作.类型:行为类模式类图: 例子:例如,思考一下添加不同类型商品的购物车,当点击结算的时候,它计算出所有不同商品需付的费用.现在,计算逻辑即为计算这些不同类型商品的价格.或者说通过访问者模式我们把此逻辑转移到了另外一个类上面.让我们实现这个访问者模式的例子. 为了实现访问者模式,最先需要做的是创建能够被添加到购物车中代表不同类型商品(itemElement)的类. ItemElement.ja