Ruby設(shè)計(jì)模式編程中對(duì)外觀模式的應(yīng)用實(shí)例分析
何為外觀模式?
外觀模式為子系統(tǒng)中一組不同的接口提供統(tǒng)一的接口。外觀定義了上層接口,通過(guò)降低復(fù)雜度和隱藏子系統(tǒng)間的通信以及依存關(guān)系,讓子系統(tǒng)更加易于使用。
比方說(shuō)子系統(tǒng)中有一組不同的類,其中一些彼此依賴。這讓客戶端難以使用子系統(tǒng)中的類,因?yàn)榭蛻舳诵枰烂恳粋€(gè)類。外觀起到整個(gè)子系統(tǒng)的入口。有些客戶端只需要子系統(tǒng)的某些基本行為,而對(duì)子系統(tǒng)的類不做太多定制,外觀為這樣的客戶端提供簡(jiǎn)化的接口。只有需要從某些子系統(tǒng)的類定制更多行為的客戶端,才會(huì)關(guān)注外觀背后的細(xì)節(jié)。
外觀模式:為系統(tǒng)中的一組接口提供一個(gè)統(tǒng)一的接口。外觀定義一個(gè)高層接口,讓子系統(tǒng)更易于使用。
何時(shí)使用外觀模式?
- 子系統(tǒng)正逐漸變得復(fù)雜。應(yīng)用模式的過(guò)程中演化出許多類,可以使用外觀為這些子系統(tǒng)提供一個(gè)較簡(jiǎn)單的接口。
- 可以使用外觀對(duì)子系統(tǒng)進(jìn)行分層。每個(gè)子系統(tǒng)級(jí)別有一個(gè)外觀作為入口點(diǎn)。讓它們通過(guò)其外觀進(jìn)行通信,可以簡(jiǎn)化它們的依賴關(guān)系。
Ruby版外觀模式應(yīng)用
需求:
股民買(mǎi)賣(mài)股票
初步代碼:
# -*- encoding: utf-8 -*- #股票1 class Stock1 def buy puts '股票1買(mǎi)入' end def sell puts '股票1賣(mài)出' end end #股票2 class Stock2 def buy puts '股票2買(mǎi)入' end def sell puts '股票2賣(mài)出' end end #股票3 class Stock3 def buy puts '股票3買(mǎi)入' end def sell puts '股票3賣(mài)出' end end #國(guó)債1 class NationalDebt1 def buy puts '國(guó)債1買(mǎi)入' end def sell puts '國(guó)債1賣(mài)出' end end #房地產(chǎn)1 class Realty1 def buy puts '房地產(chǎn)1買(mǎi)入' end def sell puts '房地產(chǎn)1賣(mài)出' 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
問(wèn)題:
可以發(fā)現(xiàn)用戶需要了解股票、國(guó)債、房產(chǎn)情況,需要參與這些項(xiàng)目的具體買(mǎi)和賣(mài),耦合性很高。
改進(jìn)代碼
# -*- encoding: utf-8 -*- #股票1 class Stock1 def buy puts '股票1買(mǎi)入' end def sell puts '股票1賣(mài)出' end end #股票2 class Stock2 def buy puts '股票2買(mǎi)入' end def sell puts '股票2賣(mài)出' end end #股票3 class Stock3 def buy puts '股票3買(mǎi)入' end def sell puts '股票3賣(mài)出' end end #國(guó)債1 class NationalDebt1 def buy puts '國(guó)債1買(mǎi)入' end def sell puts '國(guó)債1賣(mài)出' end end #房地產(chǎn)1 class Realty1 def buy puts '房地產(chǎn)1買(mǎi)入' end def sell puts '房地產(chǎn)1賣(mài)出' 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
好處:用戶不需要了解各種股票,只需購(gòu)買(mǎi)賣(mài)出基金即可。
- 設(shè)計(jì)模式中的觀察者模式在Ruby編程中的運(yùn)用實(shí)例解析
- 實(shí)例解析Ruby設(shè)計(jì)模式開(kāi)發(fā)中對(duì)觀察者模式的實(shí)現(xiàn)
- 深入剖析Ruby設(shè)計(jì)模式編程中對(duì)命令模式的相關(guān)使用
- 詳解組合模式的結(jié)構(gòu)及其在Ruby設(shè)計(jì)模式編程中的運(yùn)用
- 設(shè)計(jì)模式中的模板方法模式在Ruby中的應(yīng)用實(shí)例兩則
- 實(shí)例解析Ruby設(shè)計(jì)模式編程中Strategy策略模式的使用
- 實(shí)例講解Ruby使用設(shè)計(jì)模式中的裝飾器模式的方法
- Ruby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例
- 詳解Ruby設(shè)計(jì)模式編程中對(duì)單例模式的運(yùn)用
- Ruby設(shè)計(jì)模式編程之適配器模式實(shí)戰(zhàn)攻略
- Ruby使用設(shè)計(jì)模式中的代理模式與裝飾模式的代碼實(shí)例
- Ruby中使用設(shè)計(jì)模式中的簡(jiǎn)單工廠模式和工廠方法模式
- 解析proxy代理模式在Ruby設(shè)計(jì)模式開(kāi)發(fā)中的運(yùn)用
相關(guān)文章
Ruby簡(jiǎn)明教程之循環(huán)語(yǔ)句介紹
這篇文章主要介紹了Ruby簡(jiǎn)明教程之循環(huán)語(yǔ)句介紹,非常簡(jiǎn)潔的講解,可以作為語(yǔ)法備忘,需要的朋友可以參考下2014-06-06使用Ruby re模塊創(chuàng)建復(fù)雜的正則表達(dá)式
復(fù)雜的正則表達(dá)式很難構(gòu)建,甚至很難閱讀。Ruby的Re模塊可以幫助你利用簡(jiǎn)單的表達(dá)式構(gòu)建復(fù)雜的正則表達(dá)式2014-03-03簡(jiǎn)單介紹Ruby on Rails對(duì)PostgreSQL數(shù)組類型的支持
這篇文章主要介紹了簡(jiǎn)單介紹Ruby on Rails對(duì)PostgreSQL數(shù)組類型的支持,Rails框架從4.0以后對(duì)PG的數(shù)組提供了支持,需要的朋友可以參考下2015-04-04Ubuntu系統(tǒng)安裝Ruby語(yǔ)言的三種方法
這篇文章主要介紹了Ubuntu系統(tǒng)安裝Ruby語(yǔ)言的三種方法,本文講解了使用apt-get安裝、使用brightbox ppa倉(cāng)庫(kù)安裝、使用RVM安裝3種方法,需要的朋友可以參考下2015-01-01