2018年12月27日 12:50
原创作品,转载时请务必以超链接形式标明文章原始出处,否则将追究法律责任。
什么是代理模式,顾名思义,就是作为你的代理去帮你办事。比如打官司,卖房,律师和售楼部销售顾问就是你的代理,他们帮你打官司办购房手续。
今天我们就以买车作为案例,首先买车的人角色有很多种,有大老板,有程序员。一个是全款,一个是首付。假设这两个人是不直接和银行进行交互的,只是通过销售人员买车。
首先我们定义一下买车人的接口,每个购车人都有一个行为叫买车
internal interface 购车人 { void 买车(); }
现在定义一个老板,一个程序员
internal class 老板 : 购车人 { public void 买车() { Console.WriteLine("老板:提供证件,交全款"); } } internal class 程序员 : 购车人 { public void 买车() { Console.WriteLine("程序员:提供证件,交首付"); } }
老板还是富有,假设买的迈腾,老板一把付,程序员交10万首付。
接下来我们定义代理类
internal class 老板四S店代理 { 购车人 老板; public 老板四S店代理() { 老板 = new 老板(); } public void 买车() { 老板.买车(); Console.WriteLine("老板,直接提车,开走"); } } internal class 程序员四S店代理 { 购车人 程序员; public 程序员四S店代理() { 程序员 = new 程序员(); } public void 买车() { 程序员.买车(); Console.WriteLine("程序员,等待发放贷款"); } }
一种是代理老板的,一种是代理程序员的。大家发现这个模式和装饰模式有点像,但是不一样的是从外部我们无法得知老板四s店代理类到底代理的是谁,而装饰模式的装饰对象我们是需要提前知道的。其实这里隐藏了真实代理对象,所以也是这个模式存在的意义。另外,我们还可以在代理类中加入一些其他方法。比如洗车,擦车,验车,交车这些步骤,交给代理类去实现,被代理只负责交钱交手续。
我们来执行一下,让代理给我们办事,看一下效果
老板四S店代理 老板代理 = new 老板四S店代理(); 老板代理.买车(); 程序员四S店代理 程序员代理 = new 程序员四S店代理(); 程序员代理.买车();
输出如下,
老板:提供证件,交全款 老板,直接提车,开走 程序员:提供证件,交首付 程序员,等待发放贷款
这个是静态代理,也就是说代理类已经决定了代理对象。下来我们看一下动态代理
internal class 四S店动态代理<T> where T : 购车人 { T 购车人; public 四S店动态代理() { 购车人 = (T)Activator.CreateInstance(typeof(T)); } public void 买车() { 购车人.买车(); } }
其实很简单,根据泛型类型,动态创建代理,只要是实现了购车人接口的,我们都能生成代理。
四S店动态代理<老板> 老板动态代理 = new 四S店动态代理<老板>(); 老板动态代理.买车(); 四S店动态代理<程序员> 程序员动态代理 = new 四S店动态代理<程序员>(); 程序员动态代理.买车();
运行效果如下
老板:提供证件,交全款 程序员:提供证件,交首付
上一篇 设计模式之-观察者模式
下一篇 设计模式之-门店模式
发表评论
匿名
用户评论
暂无评论