位置:首页 > Ruby > Ruby设计模式编程中外观模式应用实例解析

Ruby设计模式编程中外观模式应用实例解析

时间:2026-08-17  |  作者:多维游侠  |  阅读:0

何为外观模式?

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

好处立竿见影:用户不再需要关心股票、国债、房产具体怎么操作,只需要一个Fund对象,一个buy一个sell就搞定全部。这就像去银&行办业务——你不需要自己跑各个窗口,去柜台一次办完就行。外观模式,本质上就是给子系统一个“柜台服务”。

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多