c# 代理模式
程序员文章站
2023-12-04 22:16:16
代理模式的应用:
远程代理,为一个对象在不同的地址空间提供局部代表,可以隐藏一个对象存在于不同地质空间的事实。
虚拟代理,根据需要创建开销很大的对象,通过代理来存放实例...
代理模式的应用:
远程代理,为一个对象在不同的地址空间提供局部代表,可以隐藏一个对象存在于不同地质空间的事实。
虚拟代理,根据需要创建开销很大的对象,通过代理来存放实例化需要很长时间的真实对象。
安全代理,用来控制真实对象的访问权限。
智能代理,当调用代理时,可以代理处理一些额外的功能。
案例场景:
向一位自己心仪的女孩表达爱意,一般我们有两种选择:亲自出马(有自信的人)和 使用‘媒婆'(比较害羞)。
其中使用‘媒婆'就是代理行为,我们实现如下:
调用代理模式的主函数:
class program { static void main(string[] args) { schoolgirl jiaojiao = new schoolgirl(); jiaojiao.name = "李娇娇"; //亲自出马 igivegift self = new pursuit(jiaojiao); self.givechocolate();//送巧克力 self.givedolls();//送洋娃娃 self.giveflowers();//送鲜花 //使用‘媒婆' igivegift daili = new proxy(jiaojiao); daili.givechocolate();//送巧克力 daili.givedolls();//送洋娃娃 daili.giveflowers();//送鲜花 console.readkey(); } }
schoolgirl类是代表女孩对象,实现如下:
public class schoolgirl { private string name; public string name { get; set; } }
pursuit类是代表一个真实的事物(追求女孩的追求者),实现如下:
public class pursuit : igivegift { schoolgirl mm; public pursuit(schoolgirl mm) { this.mm = mm; } public void givedolls() { console.writeline(mm.name+"送你洋娃娃"); } public void giveflowers() { console.writeline(mm.name + "送你鲜花"); } public void givechocolate() { console.writeline(mm.name + "送你巧克力"); } }
proxy类是pursuit类的代表,实现如下:
public class proxy : igivegift { pursuit gg; public proxy(schoolgirl mm) { this.gg = new pursuit(mm); } public void givedolls() { gg.givedolls(); } public void giveflowers() { gg.giveflowers(); } public void givechocolate() { gg.givechocolate(); } }
pursuit类和proxy类都继承igivegift接口,实现如下:
interface igivegift { void givedolls(); void giveflowers(); void givechocolate(); }
我们看一张代理模式的结构图: