fbpx
维基百科

代理模式

代理模式(英語:Proxy Pattern)是程式設計中的一種設計模式

代理模式的统一建模语言(UML)
代理模式的LePUS3建模语言英语LePUS3 ()

所謂的代理者是指一個類別可以作為其它東西的介面。代理者可以作任何東西的介面:網路連接、記憶體中的大物件、檔案或其它昂貴或無法複製的資源。

著名的代理模式例子為參照計數(英語:reference counting)指標物件。

當一個複雜物件的多份副本須存在時,代理模式可以結合享元模式以減少記憶體用量。典型作法是建立一個複雜物件及多個代理者,每個代理者會參照到原本的複雜物件。而作用在代理者的運算會轉送到原本物件。一旦所有的代理者都不存在時,複雜物件會被移除。

示例 编辑

Java 编辑

以下Java範例解釋"虛擬代理"模式。ProxyImage 類別用來存取遠端方法。

import java.util.*;   interface Image {  public void displayImage(); } //on System A  class RealImage implements Image {  private String filename;  public RealImage(String filename) {   this.filename = filename;  loadImageFromDisk();  }  private void loadImageFromDisk() {  System.out.println("Loading " + filename);  }  public void displayImage() {   System.out.println("Displaying " + filename);   } } //on System B  class ProxyImage implements Image {  private String filename;  private Image image;    public ProxyImage(String filename) {   this.filename = filename;   }  public void displayImage() {  if(image == null)  image = new RealImage(filename);  image.displayImage();  } }   class ProxyExample {  public static void main(String[] args) {  Image image1 = new ProxyImage("HiRes_10MB_Photo1");  Image image2 = new ProxyImage("HiRes_10MB_Photo2");     image1.displayImage(); // loading necessary  image2.displayImage(); // loading necessary  } } 

程式的輸出為:

Loading HiRes_10MB_Photo1 Displaying HiRes_10MB_Photo1 Loading HiRes_10MB_Photo2 Displaying HiRes_10MB_Photo2 

C# 编辑

using System; namespace Proxy {  class Program  {  interface IImage  {  void Display();  }  class RealImage : IImage  {  public RealImage(string fileName)  {  FileName = fileName;  LoadFromFile();  }  private void LoadFromFile()  {  Console.WriteLine("Loading " + FileName);  }  public String FileName { get; private set; }  public void Display()  {  Console.WriteLine("Displaying " + FileName);  }  }  class ProxyImage : IImage  {  public ProxyImage(string fileName)  {  FileName = fileName;  }  public String FileName { get; private set; }  private IImage image;  public void Display()  {  if (image == null)  image = new RealImage(FileName);  image.Display();  }  }  static void Main(string[] args)  {  IImage image = new ProxyImage("HiRes_Image");  for (int i = 0; i < 10; i++)  image.Display();  }  } } 

程式的輸出為:

Loading HiRes_Image Displaying HiRes_Image Displaying HiRes_Image Displaying HiRes_Image Displaying HiRes_Image Displaying HiRes_Image Displaying HiRes_Image Displaying HiRes_Image Displaying HiRes_Image Displaying HiRes_Image Displaying HiRes_Image 

另見 编辑

外部連結 编辑

  • PerfectJPattern 開源計劃(页面存档备份,存于互联网档案馆),提供 Java 中代理模式的元件實作。


代理模式, 英語, proxy, pattern, 是程式設計中的一種設計模式, 的统一建模语言, 图的lepus3建模语言, 英语, lepus3, 图例, 所謂的代理者是指一個類別可以作為其它東西的介面, 代理者可以作任何東西的介面, 網路連接, 記憶體中的大物件, 檔案或其它昂貴或無法複製的資源, 著名的例子為參照計數, 英語, reference, counting, 指標物件, 當一個複雜物件的多份副本須存在時, 可以結合享元模式以減少記憶體用量, 典型作法是建立一個複雜物件及多個代理者, 每個代理者會參. 代理模式 英語 Proxy Pattern 是程式設計中的一種設計模式 代理模式的统一建模语言 UML 图代理模式的LePUS3建模语言 英语 LePUS3 图例 所謂的代理者是指一個類別可以作為其它東西的介面 代理者可以作任何東西的介面 網路連接 記憶體中的大物件 檔案或其它昂貴或無法複製的資源 著名的代理模式例子為參照計數 英語 reference counting 指標物件 當一個複雜物件的多份副本須存在時 代理模式可以結合享元模式以減少記憶體用量 典型作法是建立一個複雜物件及多個代理者 每個代理者會參照到原本的複雜物件 而作用在代理者的運算會轉送到原本物件 一旦所有的代理者都不存在時 複雜物件會被移除 目录 1 示例 1 1 Java 1 2 C 2 另見 3 外部連結示例 编辑Java 编辑 以下Java範例解釋 虛擬代理 模式 ProxyImage 類別用來存取遠端方法 import java util interface Image public void displayImage on System A class RealImage implements Image private String filename public RealImage String filename this filename filename loadImageFromDisk private void loadImageFromDisk System out println Loading filename public void displayImage System out println Displaying filename on System B class ProxyImage implements Image private String filename private Image image public ProxyImage String filename this filename filename public void displayImage if image null image new RealImage filename image displayImage class ProxyExample public static void main String args Image image1 new ProxyImage HiRes 10MB Photo1 Image image2 new ProxyImage HiRes 10MB Photo2 image1 displayImage loading necessary image2 displayImage loading necessary 程式的輸出為 Loading HiRes 10MB Photo1 Displaying HiRes 10MB Photo1 Loading HiRes 10MB Photo2 Displaying HiRes 10MB Photo2 C 编辑 using System namespace Proxy class Program interface IImage void Display class RealImage IImage public RealImage string fileName FileName fileName LoadFromFile private void LoadFromFile Console WriteLine Loading FileName public String FileName get private set public void Display Console WriteLine Displaying FileName class ProxyImage IImage public ProxyImage string fileName FileName fileName public String FileName get private set private IImage image public void Display if image null image new RealImage FileName image Display static void Main string args IImage image new ProxyImage HiRes Image for int i 0 i lt 10 i image Display 程式的輸出為 Loading HiRes Image Displaying HiRes Image Displaying HiRes Image Displaying HiRes Image Displaying HiRes Image Displaying HiRes Image Displaying HiRes Image Displaying HiRes Image Displaying HiRes Image Displaying HiRes Image Displaying HiRes Image另見 编辑組合模式 修飾模式 惰性初始模式外部連結 编辑Java 中的代理模式 UML 和 LePUS3 一種形式塑模語言 中的代理模式 以代理模式掌控大局 PerfectJPattern 開源計劃 页面存档备份 存于互联网档案馆 提供 Java 中代理模式的元件實作 取自 https zh wikipedia org w index php title 代理模式 amp oldid 64351152, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。