記錄大話設計學習過程。 代理模式:代理者為其他對象提供代理,以控制對真實對象的訪問。 用戶調用代理者,代理者通過真實的對象引用讓對象去做事情。但是代理者可以附加一些功能,然後才讓真實對象去做事情。 代理模式運用案例:WebService生成代理訪問服務,虛擬代理、安全代理(控制真實對象訪問時的許可權) ...
記錄大話設計學習過程。
代理模式:代理者為其他對象提供代理,以控制對真實對象的訪問。
用戶調用代理者,代理者通過真實的對象引用讓對象去做事情。但是代理者可以附加一些功能,然後才讓真實對象去做事情。
代理模式運用案例:WebService生成代理訪問服務,虛擬代理、安全代理(控制真實對象訪問時的許可權)、智能引用。

using System; namespace ConsoleApp4 { class Program { public static void Main(string[] args) { var girl = new SchoolGirl("鄧紫棋"); Proxy proxy = new Proxy(girl); proxy.GiveFlowers(); proxy.GiveChocolate(); proxy.GiveDolls(); } } interface GiveGift { void GiveDolls(); void GiveFlowers(); void GiveChocolate(); } class Pursuit : GiveGift { SchoolGirl girl; public Pursuit(SchoolGirl girl) { this.girl=girl; } public void GiveChocolate() { Console.WriteLine("送巧克力"); } public void GiveDolls() { Console.WriteLine("送洋娃娃"); } public void GiveFlowers() { Console.WriteLine("送花"); } } class Proxy : GiveGift { Pursuit Pursuit; public Proxy(SchoolGirl girl) { Pursuit = new Pursuit(girl); } public void GiveChocolate() { this.Pursuit.GiveChocolate(); } public void GiveDolls() { this.Pursuit.GiveDolls(); } public void GiveFlowers() { this.Pursuit.GiveFlowers(); } } internal class SchoolGirl { public string Name { get; set; } public SchoolGirl(string name) { this.Name = name; } } }View Code
using System; namespace ConsoleApp4 { class Program { public static void Main(string[] args) { Proxy proxy = new Proxy(); proxy.Request(); } } abstract class Subject { public abstract void Request(); } class RealSubject : Subject { public override void Request() { Console.WriteLine("真實對象在請求"); } } class Proxy : Subject { RealSubject realSubject; public Proxy() { this.realSubject = new RealSubject(); } public override void Request() { // 寫一堆附加功能代碼..... realSubject.Request(); } } }