淺析.NET開發中代理模式的使用(外摘)

來源:互聯網
上載者:User
當我們需要使用的對象很複雜或者需要很長時間去構造,這時就可以使用代理模式(Proxy)。例如:如果構建一個對象很耗費時間和電腦資源,代理模式(Proxy)允許我們控制這種情況,直到我們需要使用實際的對象。一個代理(Proxy)通常包含和將要使用的對象同樣的方法,一旦開始使用這個對象,這些方法將通過代理(Proxy)傳遞給實際的對象。 

   一些可以使用代理模式(Proxy)的情況:

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

   2、一個需要很長時間才可以完成的計算結果,並且需要在它計算過程中顯示中間結果

   3、一個存在於遠端電腦上的對象,需要通過網路載入這個遠程對象則需要很長時間,特別是在網路傳輸高峰期。

   4、一個對象只有有限存取權,代理模式(Proxy)可以驗證使用者的許可權

   代理模式(Proxy)也可以被用來區別一個對象執行個體的請求和實際的訪問,例如:在程式初始化過程中可能建立多個對象,但並不都是馬上使用,代理模式(Proxy)可以載入需要的真正的對象。

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

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

   映像Proxy代碼:

Public Class ImageProxy 

  Private done As Boolean
  Private tm As Timer

  Public Sub New()
   done = False
   '設定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
   '顯示預先的映像,直到實際映像載入完成
   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

   實現介面:

   預先載入的映像的類:

Public Class QuickImage 

  Implements Imager
  Public Function getImage() As Image Implements Imager.getImage
   Return New bitmap("Box.gif")
  End Function

End Class

   載入實際映像的類:

Public Class FinalImage 

  Implements Imager

  Public Function getImage() As Image Implements Imager.getImage
   Return New Bitmap("flowrtree.jpg")
  End Function

End Class

   在顯示映像的表單中,定義一個映像代理的(Proxy)執行個體,在載入映像按鈕事件中,載入映像:

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.