大话设计模式-代理模式(7)
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ProxyFactory { interface IGiveGift { void GiveDolls(); void GiveFlowers(); void GvieChoolate(); } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ProxyFactory { class Proxy:IGiveGift { Pursuit gg; public Proxy(SchoolGirl mm) { gg = new Pursuit(mm); } public void GiveDolls() { gg.GiveDolls(); } public void GiveFlowers() { gg.GiveFlowers(); } public void GvieChoolate() { gg.GvieChoolate(); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ProxyFactory { abstract class Subject { public abstract void Request(); } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ProxyFactory { class Pursuit:IGiveGift { SchoolGirl mm; public Pursuit(SchoolGirl mm) { this.mm = mm; } public void GiveDolls() { Console.WriteLine("{0}送你洋娃娃!",mm.Name); } public void GiveFlowers() { Console.WriteLine("{0}送你鲜花!",mm.Name); } public void GvieChoolate() { Console.WriteLine("{0}送你巧克力!",mm.Name); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ProxyFactory { class RealSubject:Subject { public override void Request() { Console.WriteLine("真实的请求!"); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ProxyFactory { class SubProxy:Subject { RealSubject realSubject; public override void Request() { if (realSubject == null) { realSubject = new RealSubject(); } realSubject.Request(); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ProxyFactory { class SchoolGirl { private string name; public string Name { get { return name; } set { name = value; } } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ProxyFactory { class Program { static void Main(string[] args) { SchoolGirl mm = new SchoolGirl(); mm.Name = "李娇娇"; Proxy daili = new Proxy(mm); daili.GiveDolls(); daili.GiveFlowers(); daili.GvieChoolate(); SubProxy subProxy = new SubProxy(); subProxy.Request(); Console.ReadLine(); } } }
代理模式
代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问.
优点
(1).职责清晰,真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。
(2).代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用。
(3).高扩展性
模式结构
一个是真正的你要访问的对象(目标类),一个是代理对象,真正对象与代理对象实现同一个接口,先访问代理类再访问真正要访问的对象。