static void Main(string[] args) { SchoolGril jiaojiao = new SchoolGril(); jiaojiao.Name = "娇娇"; Proxy daili = new Proxy(jiaojiao); daili.GiveDolls(); daili.GiveFlowers(); daili.GiveChololate(); Console.ReadKey(); }
// 代理模式 // 為其他物件提供一種代理以控制對這個物件的存取 // 2個Class用一樣的介面,然後其中一個可以呼叫另一個代理的介面 // 何時使用: // 1.遠端代理,也就是為一個物件在不同的位址空間提供局部代表。這樣可以隱藏一個物件存在於不同位址空間的事實 (例如WebService的WebReference) // 2.虛擬代理,是根據需要建立消耗很大的物件。透過它來存取實體化需要很長時間的真實物件。(例如讀很大的Html文字會先出來,圖片會被瀏覽器代理來代替真實的圖片,此時代理儲存真實圖片的路徑和尺寸) 瀏覽器就是用代理模式優化下載 // 3.安全代理,用來控制真實物件存取時的許可權(一般用於物件應該有不同的存取許可權時) // 4.智慧代理,是指當調用真實的物件時,代理處理另外一些事(如計算真實物件的參考次數,或第一次參考的物件把它裝到記憶體或在存取實體物件前檢查是否已經鎖定) public void Proxy() { // 場景: 小菜(追求者)叫大鳥(代理)送東西給娜娜(被追求者) var gril = new SchoolGril { Name = "娜娜" }; var proxy = new Proxy(gril); // Suject類別 定義了ReadSubject和Proxy的共用介面,這樣任何使用ReadSubject的地方都可以用Proxy // ReadSubject類別,定義Proxy所代表的真實實體 // Proxy類別,保存一個參考使得代理可以存取實體,並提供一個與Subject的介面相同的介面,這樣代理就可以用來代替實體 var proxyV2 = new ProxyV2(); proxyV2.Request(); Console.Read(); }
public Proxy(SchoolGril mm) { gg = new Pursuit(mm); }
public Pursuit(SchoolGril mm) { this.mm = mm; }