国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

設(shè)計模式之代理模式(Proxy)

這篇具有很好參考價值的文章主要介紹了設(shè)計模式之代理模式(Proxy)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

當(dāng)我們需要使用的對象很復(fù)雜或者需要很長時間去構(gòu)造,這時就可以使用代理模式(Proxy)。例如:如果構(gòu)建一個對象很耗費(fèi)時間和計算機(jī)資源,代理模式(Proxy)允許我們控制這種情況,直到我們需要使用實(shí)際的對象。一個代理(Proxy)通常包含和將要使用的對象同樣的方法,一旦開始使用這個對象,這些方法將通過代理(Proxy)傳遞給實(shí)際的對象。
一些可以使用代理模式(Proxy)的情況:

一個對象,比如一幅很大的圖像,需要載入的時間很長。

一個需要很長時間才可以完成的計算結(jié)果,并且需要在它計算過程中顯示中間結(jié)果

一個存在于遠(yuǎn)程計算機(jī)上的對象,需要通過網(wǎng)絡(luò)載入這個遠(yuǎn)程對象則需要很長時間,特別是在網(wǎng)絡(luò)傳輸高峰期。

一個對象只有有限的訪問權(quán)限,代理模式(Proxy)可以驗(yàn)證用戶的權(quán)限

代理模式(Proxy)也可以被用來區(qū)別一個對象實(shí)例的請求和實(shí)際的訪問,例如:在程序初始化過程中

可能建立多個對象,但并不都是馬上使用,代理模式(Proxy)可以載入需要的真正的對象。

這是一個需要載入和顯示一幅很大的圖像的程序,當(dāng)程序啟動時,就必須確定要顯示的圖像,但是實(shí)際的圖像只能在完全載入后才可以顯示!這時我們就可以使用代理模式(Proxy)。

這個代理模式(Proxy)可以延遲實(shí)際圖像的載入,直到它接收到一個paint請求。在實(shí)際圖像的載入期間我們可以通過代理模式(Proxy)在實(shí)際圖像要顯示的位置預(yù)先載入一個比較小、簡單的圖形。

圖像Proxy代碼:

Public Class ImageProxy

Private done As Boolean

Private tm As Timer

Public Sub New()

    done = False

    '設(shè)置timer 延遲5秒

    tm = New Timer( _

    New TimerCallback(AddressOf tCallback), Me, 5000, 0)

End Sub

Public Function isReady() As Boolean

Return done

End Function

Public Function getImage() As Image

    Dim img As Imager

    '顯示預(yù)先的圖像,直到實(shí)際圖像載入完成

    If isReady Then

        img = New FinalImage()

    Else

        img = New QuickImage()

    End If

    Return img.getImage

End Function

Public Sub tCallback(ByVal obj As Object)

    done = True

    tm.Dispose()

End Sub

End Class

定義一個簡單的接口:

Public Interface Imager

Function getImage() As image

End Interface

實(shí)現(xiàn)接口:

預(yù)先載入的圖像的類:

Public Class QuickImage

Implements Imager

Public Function getImage() As Image _

        Implements Imager.getImage

    Return New bitmap("Box.gif")

End Function

End Class

載入實(shí)際圖像的類:

Public Class FinalImage

Implements Imager

Public Function getImage() As Image _

    Implements Imager.getImage

    Return New Bitmap("flowrtree.jpg")

End Function

End Class

在顯示圖像的窗體中,定義一個圖像代理的(Proxy)實(shí)例,在載入圖像按鈕事件中,載入圖像:

Private imgProxy As ImageProxy

Public Sub New()

    MyBase.New

    Form1 = Me

    InitializeComponent

    imgproxy = New ImageProxy()

End Sub

Protected Sub btLoad_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btLoad.Click

    pic.Image = imgProxy.getImage

End Sub

總結(jié):

這只是一個很簡單的例子(例子來自于《c#設(shè)計模式》),通過這個例子可以對代理(Proxy)有初步的認(rèn)識!Adapter模式和代理模式(Proxy)都是在對象間構(gòu)造一個簡單的層。然而,Adapter模式向?qū)ο筇峁┮粋€不同的接口,代理模式(Proxy)為對象提供相同的接口文章來源地址http://www.zghlxwxcb.cn/news/detail-518909.html

到了這里,關(guān)于設(shè)計模式之代理模式(Proxy)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包