何為外觀模式?
外觀模式為子系統(tǒng)中一組不同的接口提供統(tǒng)一的接口。外觀定義了上層接口,通過降低復(fù)雜度和隱藏子系統(tǒng)間的通信以及依存關(guān)系,讓子系統(tǒng)更加易于使用。
比方說子系統(tǒng)中有一組不同的類,其中一些彼此依賴。這讓客戶端難以使用子系統(tǒng)中的類,因為客戶端需要知道每一個類。外觀起到整個子系統(tǒng)的入口。有些客戶端只需要子系統(tǒng)的某些基本行為,而對子系統(tǒng)的類不做太多定制,外觀為這樣的客戶端提供簡化的接口。只有需要從某些子系統(tǒng)的類定制更多行為的客戶端,才會關(guān)注外觀背后的細節(jié)。
外觀模式:為系統(tǒng)中的一組接口提供一個統(tǒng)一的接口。外觀定義一個高層接口,讓子系統(tǒng)更易于使用。
何時使用外觀模式?
- 子系統(tǒng)正逐漸變得復(fù)雜。應(yīng)用模式的過程中演化出許多類,可以使用外觀為這些子系統(tǒng)提供一個較簡單的接口。
- 可以使用外觀對子系統(tǒng)進行分層。每個子系統(tǒng)級別有一個外觀作為入口點。讓它們通過其外觀進行通信,可以簡化它們的依賴關(guān)系。
Ruby版外觀模式應(yīng)用
需求:
股民買賣股票
初步代碼:
# -*- 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
#房地產(chǎn)1
class Realty1
def buy
puts '房地產(chǎn)1買入'
end
def sell
puts '房地產(chǎn)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
問題:
可以發(fā)現(xiàn)用戶需要了解股票、國債、房產(chǎn)情況,需要參與這些項目的具體買和賣,耦合性很高。
改進代碼
# -*- 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
#房地產(chǎn)1
class Realty1
def buy
puts '房地產(chǎn)1買入'
end
def sell
puts '房地產(chǎn)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
好處:用戶不需要了解各種股票,只需購買賣出基金即可。
您可能感興趣的文章:- 設(shè)計模式中的觀察者模式在Ruby編程中的運用實例解析
- 實例解析Ruby設(shè)計模式開發(fā)中對觀察者模式的實現(xiàn)
- 深入剖析Ruby設(shè)計模式編程中對命令模式的相關(guān)使用
- 詳解組合模式的結(jié)構(gòu)及其在Ruby設(shè)計模式編程中的運用
- 設(shè)計模式中的模板方法模式在Ruby中的應(yīng)用實例兩則
- 實例解析Ruby設(shè)計模式編程中Strategy策略模式的使用
- 實例講解Ruby使用設(shè)計模式中的裝飾器模式的方法
- Ruby設(shè)計模式編程中使用Builder建造者模式的實例
- 詳解Ruby設(shè)計模式編程中對單例模式的運用
- Ruby設(shè)計模式編程之適配器模式實戰(zhàn)攻略
- Ruby使用設(shè)計模式中的代理模式與裝飾模式的代碼實例
- Ruby中使用設(shè)計模式中的簡單工廠模式和工廠方法模式
- 解析proxy代理模式在Ruby設(shè)計模式開發(fā)中的運用