亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

解析proxy代理模式在Ruby設(shè)計模式開發(fā)中的運(yùn)用

 更新時間:2016年04月06日 12:02:15   作者:李舒磊  
這篇文章主要介紹了proxy代理模式在Ruby設(shè)計模式開發(fā)中的運(yùn)用,通過代理模式以客戶透明的形式可以動態(tài)地為目標(biāo)對象加以行為控制,需要的朋友可以參考下

代理模式
Proxy代理模式是一種結(jié)構(gòu)型設(shè)計模式,主要解決的問題是:在直接訪問對象時帶來的問題,比如說:要訪問的對象在遠(yuǎn)程的機(jī)器上。在面向?qū)ο笙到y(tǒng)中,有些對象由于某些原因(比如對象創(chuàng)建開銷很大,或者某些操作需要安全控制,或者需要進(jìn)程外的訪問),直接訪問會給使用者或者系統(tǒng)結(jié)構(gòu)帶來很多麻煩,我們可以在訪問此對象時加上一個對此對象的訪問層。如下圖:

 201646120047716.jpg (362×188)

  比如說C和A不在一個服務(wù)器上,A要頻繁的調(diào)用C,我們可以在A上做一個代理類Proxy,把訪問C的工作交給Proxy,這樣對于A來說,就好像在直接訪問C的對象。在對A的開發(fā)中我們可以把注意力完全放在業(yè)務(wù)的實現(xiàn)上。
GoF《設(shè)計模式》中說道:為其他對象提供一種代理以控制這個對象的訪問。
Proxy模式的結(jié)構(gòu):

201646120114617.jpg (421×101)

通過代理模式以客戶透明的形式動態(tài)的為目標(biāo)對象加以行為控制

實例

class BankAccount
 
 def deposit
  p "store the money"
 end
 
end

class Proxy
 
 attr_accessor :bankAccount
 
 def initialize bankAccount
  @bankAccount = bankAccount
 end
 
 def deposit
  @bankAccount.deposit
 end
 
end

 創(chuàng)建銀行賬戶類,再創(chuàng)建代理類,代理類聚合銀行賬戶類,提供相同的行為結(jié)構(gòu),對客戶來說代理類就是一個偽賬戶類,對代理類做操作的時候,其實就是在對真實的銀行類做操作。
加以行為控制:

class Proxy
 
 attr_accessor :bankAccount
 
 def initialize bankAccount
  @bankAccount = bankAccount
 end
 
 def deposit
  check_something
  @bankAccount.deposit
 end
 
 def check_something
  #do some checking code
 end
 
end

 這樣我們就可以在對調(diào)用目標(biāo)對象的同時增加控制代碼,但是這一切都是以透明的方式展示給客戶,對客戶來說就跟調(diào)用普通的BankAccount對象方法一樣

bankAccount = BankAccount.new
bankAccount.deposit
proxy = Proxy.new bankAccount
proxy.deposit

  Proxy模式的要點:
1、“增加一層間接層”是軟件系統(tǒng)中對許多負(fù)責(zé)問題的一種常見解決方法。在面向?qū)ο笙到y(tǒng)中,直接使用某些對象會帶來很多問題,作為間接層的proxy對象便是解決這一問題的常用手段。
在我們?nèi)粘5墓ぷ髦幸渤3S玫酱砟J?,比如對于三層結(jié)構(gòu)或者N- tiers結(jié)構(gòu)中DAL數(shù)據(jù)訪問層,它把對數(shù)據(jù)庫的訪問進(jìn)行封裝。BLL業(yè)務(wù)層的開發(fā)者只是調(diào)用DAL中的方法來獲得數(shù)據(jù)。
再比如前一段時間看了看AOP和Remoting方面的資料,對于跨越應(yīng)用程序域的訪問,要為客戶應(yīng)用程序提供一個TransparentProxy(透明代理),客戶程序?qū)嶋H上是通過訪問這個代理來訪問實際的類型對象。
2、具體proxy設(shè)計模式的實現(xiàn)方法、實現(xiàn)粒度都相差很大,有些可能對單個對象作細(xì)粒度的控制,有些可能對組件模塊提供抽象代理層,在架構(gòu)層次對對象作proxy。
3、proxy并不一定要求保持接口的一致性,只要能夠?qū)崿F(xiàn)間接控制,有時候損及一些透明性是可以接受的。例如上面的那個例子,代理類型ProxyClass和被代理類型LongDistanceClass可以不用繼承自同一個接口,正像GoF《設(shè)計模式》中說的:為其他對象提供一種代理以控制這個對象的訪問。代理類型從某種角度上講也可以起到控制被代理類型的訪問的作用。

 

相關(guān)文章

  • 在Ruby中利用Net::SMTP類發(fā)送電子郵件的教程

    在Ruby中利用Net::SMTP類發(fā)送電子郵件的教程

    這篇文章主要介紹了在Ruby中利用Net::SMTP類發(fā)送電子郵件的教程,包括類中所帶方法的用法介紹,需要的朋友可以參考下
    2015-05-05
  • Windows下安裝配置Ruby的debug工具ruby-debug-base19

    Windows下安裝配置Ruby的debug工具ruby-debug-base19

    這篇文章主要介紹了Windows下安裝配置Ruby的debug工具ruby-debug-base19的方法,同時講解了Ruby的IDE RubyMine中的相關(guān)配置方法,需要的朋友可以參考下
    2016-03-03
  • ruby實現(xiàn)github第三方認(rèn)證

    ruby實現(xiàn)github第三方認(rèn)證

    GitHub在用戶認(rèn)證過程中采用了雙匙機(jī)制,在雙匙加密機(jī)制中,只有合法用戶才擁有私匙,只要GitHub在收到請求時可以證明提交請求的客戶端上擁有該私匙,即可以確認(rèn)該操作是由合法用戶發(fā)起的。我們通過ruby來簡單模擬下吧。
    2015-06-06
  • 編寫Ruby代碼注釋時需要注意的一些問題

    編寫Ruby代碼注釋時需要注意的一些問題

    這篇文章主要介紹了編寫Ruby代碼注釋時需要注意的一些問題,特別是在團(tuán)隊協(xié)作時好的注釋能大大增加代碼的可讀性,需要的朋友可以參考下
    2015-08-08
  • ruby 實變量

    ruby 實變量

    ruby 實變量...
    2007-11-11
  • 使用RVM實現(xiàn)控制切換Ruby/Rails版本

    使用RVM實現(xiàn)控制切換Ruby/Rails版本

    RVM 是Ruby Version Manager的縮寫,是一個命令行工具,它可以讓你輕松地安裝,管理和使用多個版本的Ruby.不同的rails項目使用等ruby和rails版本不一樣的時候,可以使用RVM自由切換。
    2017-06-06
  • 舉例理解Ruby on Rails的頁面緩存機(jī)制

    舉例理解Ruby on Rails的頁面緩存機(jī)制

    這篇文章主要介紹了舉例理解Ruby on Rails的頁面緩存機(jī)制,本文來自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下
    2015-04-04
  • 關(guān)于Ruby on Rails視圖編寫的一些建議

    關(guān)于Ruby on Rails視圖編寫的一些建議

    這篇文章主要介紹了關(guān)于Ruby on Rails視圖編寫的一些建議,有助于團(tuán)隊協(xié)作時對代碼的調(diào)試工作,需要的朋友可以參考下
    2015-08-08
  • 簡單介紹Ruby on Rails對PostgreSQL數(shù)組類型的支持

    簡單介紹Ruby on Rails對PostgreSQL數(shù)組類型的支持

    這篇文章主要介紹了簡單介紹Ruby on Rails對PostgreSQL數(shù)組類型的支持,Rails框架從4.0以后對PG的數(shù)組提供了支持,需要的朋友可以參考下
    2015-04-04
  • Ruby實現(xiàn)的3種快速排序算法

    Ruby實現(xiàn)的3種快速排序算法

    這篇文章主要介紹了Ruby實現(xiàn)的3種快速排序算法,本文給出了快速排序的普通版本、快速排序的隨機(jī)化版本、快速排序的利用了Ruby的語法糖的隨機(jī)化版本三個版本,需要的朋友可以參考下
    2015-05-05

最新評論