一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語(yǔ)言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Ruby - 解析proxy代理模式在Ruby設(shè)計(jì)模式開(kāi)發(fā)中的運(yùn)用

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

2020-05-08 10:26李舒磊 Ruby

這篇文章主要介紹了proxy代理模式在Ruby設(shè)計(jì)模式開(kāi)發(fā)中的運(yùn)用,通過(guò)代理模式以客戶透明的形式可以動(dòng)態(tài)地為目標(biāo)對(duì)象加以行為控制,需要的朋友可以參考下

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

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

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

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

 

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

實(shí)例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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),對(duì)客戶來(lái)說(shuō)代理類就是一個(gè)偽賬戶類,對(duì)代理類做操作的時(shí)候,其實(shí)就是在對(duì)真實(shí)的銀行類做操作。
加以行為控制:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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

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

?
1
2
3
4
bankAccount = BankAccount.new
bankAccount.deposit
proxy = Proxy.new bankAccount
proxy.deposit

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

延伸 · 閱讀

精彩推薦
  • RubyCentOS中配置Ruby on Rails環(huán)境

    CentOS中配置Ruby on Rails環(huán)境

    經(jīng)過(guò)一個(gè)上午的折騰,終于把ROR環(huán)境在CentOS中搞定,繞了很多彎路,把文章寫下來(lái)總結(jié)一下 ...

    可樂(lè)加糖4762020-04-12
  • RubyRuby環(huán)境下安裝使用bundler來(lái)管理多版本的gem

    Ruby環(huán)境下安裝使用bundler來(lái)管理多版本的gem

    這篇文章主要介紹了Ruby環(huán)境下安裝使用bundler來(lái)管理多版本的gem的方法,舉了Ruby On Rails中的應(yīng)用實(shí)例來(lái)進(jìn)行演示,需要的朋友可以參考下 ...

    日拱一卒4332020-05-10
  • RubyRuby簡(jiǎn)潔學(xué)習(xí)筆記(一):字符串、數(shù)字、類和對(duì)象

    Ruby簡(jiǎn)潔學(xué)習(xí)筆記(一):字符串、數(shù)字、類和對(duì)象

    這篇文章主要介紹了Ruby簡(jiǎn)潔學(xué)習(xí)筆記(一):字符串、數(shù)字、類和對(duì)象,本文是學(xué)習(xí)筆記第一篇,需要的朋友可以參考下 ...

    腳本之家2472020-04-20
  • RubyRuby迭代器的7種技巧分享

    Ruby迭代器的7種技巧分享

    這篇文章主要介紹了Ruby迭代器的7種技巧分享,Ruby中的迭代器非常人性化,本文既是講解了7個(gè)技巧也是講解了7種迭代器,需要的朋友可以參考下 ...

    腳本之家4782020-04-20
  • Ruby簡(jiǎn)要說(shuō)明Ruby中的迭代器

    簡(jiǎn)要說(shuō)明Ruby中的迭代器

    這篇文章主要介紹了Ruby中的迭代器,迭代器的概念在動(dòng)態(tài)語(yǔ)言的編程中十分重要,文章中介紹了Ruby中的each迭代器和collect迭代器,需要的朋友可以參考下 ...

    goldensun2772020-04-25
  • Ruby剖析 Ruby 訪問(wèn)控制

    剖析 Ruby 訪問(wèn)控制

    前面,我們說(shuō) Ruby 沒(méi)有函數(shù),只有方法.而且實(shí)際上有不止一種方法.這一節(jié)我們介紹 訪問(wèn)控制 (accesscontrols). 想想當(dāng)我們?cè)谧罡邔佣皇窃谝粋€(gè)類的定義里定義...

    ruby教程網(wǎng)3572020-04-08
  • RubyRuby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例

    Ruby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例

    這篇文章主要介紹了Ruby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例,建造者模式將一個(gè)復(fù)雜對(duì)象的構(gòu)造與它的表示分離,使同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表...

    范孝鵬2192020-05-07
  • RubyRuby進(jìn)行文件信息輸出實(shí)例代碼

    Ruby進(jìn)行文件信息輸出實(shí)例代碼

    Ruby進(jìn)行文件信息輸出實(shí)例代碼,數(shù)據(jù)是隨機(jī)的,所以每次的記錄都會(huì)不同。 ...

    ruby教程網(wǎng)2962020-04-10
主站蜘蛛池模板: 欧美日韩中文国产一区二区三区 | 四缺一写的小说 | 午夜福利试看120秒体验区 | 亚洲国产在线视频中文字 | 美女张开腿让我了一夜 | 扒开胸流出吃奶 | 色综合综合色 | 香蕉tv亚洲专区在线观看 | 网站国产 | 成人看的羞羞视频免费观看 | 久久99re热在线播放7 | 欧美高清无砖专区欧美精品 | 99精品在线视频 | a级精品九九九大片免费看 a级动漫 | 欧美夜夜精品一级爽 | 亚洲视频999 | asian4you裸模 | 亚洲午夜视频 | 五月天国产精品 | 精品国产国产综合精品 | 精品亚洲永久免费精品 | 日本www视频在线观看 | 国产精品一区二区在线观看完整版 | 日韩欧美不卡片 | 精彩国产萝视频在线 | 亚洲精品高清中文字幕完整版 | 情人我吃糖果小说 | 好男人天堂网 | 性导航h | 91四虎国自产在线播放线 | 99这里都是精品 | 波多野结衣中文字幕乱七八糟 | 国产成人精品一区二区阿娇陈冠希 | 慢慢娇淫 | 久久精品中文騷妇女内射 | 亚洲色图亚洲色图 | 天天干天天爽天天操 | wc凹凸撒尿间谍女厕hd | 啪啪链接 | 国产精品va在线观看不 | 爱福利视频一区二区 |