大话设计-代理模式
记录大话设计学习过程。
代理模式:代理者为其他对象提供代理,以控制对真实对象的访问。
用户调用代理者,代理者通过真实的对象引用让对象去做事情。但是代理者可以附加一些功能,然后才让真实对象去做事情。
代理模式运用案例: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; } } }
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(); } } }
量变会引起质变。