-
C#教程之c# 代理模式
代理模式的应用:
远程代理,为一个对象在不同的地址空间提供局部代表,可以隐藏一个对象存在于不同地质空间的事实。
虚拟代理,根据需要创建开销很大的对象,通过代理来存放实例化需要很长时间的真实对象。
安全代理,用来控制真实对象的访问权限。
智能代理,当调用代理时,可以代理处理一些额外的功能。
案例场景:
向一位自己心仪的女孩表达爱意,一般我们有两种选择:亲自出马(有自信的人)和 使用‘媒婆'(比较害羞)。
其中使用‘媒婆'就是代理行为,我们实现如下:
调用代理模式的主函数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
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类是代表女孩对象,实现如下:
1
2
3
4
5
6
7
8
9
|
public class SchoolGirl { private string name; public string Name { get ; set ; } } |
Pursuit类是代表一个真实的事物(追求女孩的追求者),实现如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
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类的代表,实现如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
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接口,实现如下:
1
2
3
4
5
6
|
interface IGiveGift { void GiveDolls(); void GiveFlowers(); void GiveChocolate(); } |
我们看一张代理模式的结构图:
最新更新
Objective-C语法之代码块(block)的使用
VB.NET eBook
Add-in and Automation Development In VB.NET 2003 (F
Add-in and Automation Development In VB.NET 2003 (8
Add-in and Automation Development in VB.NET 2003 (6
Add-in and Automation Development In VB.NET 2003 (5
AddIn Automation Development In VB.NET 2003 (4)
AddIn And Automation Development In VB.NET 2003 (2)
Addin and Automation Development In VB.NET 2003 (3)
AddIn And Automation Development In VB.NET 2003 (1)
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
武装你的WEBAPI-OData入门
武装你的WEBAPI-OData便捷查询
武装你的WEBAPI-OData分页查询
武装你的WEBAPI-OData资源更新Delta
5. 武装你的WEBAPI-OData使用Endpoint 05-09
武装你的WEBAPI-OData之API版本管理
武装你的WEBAPI-OData常见问题
武装你的WEBAPI-OData聚合查询
OData WebAPI实践-OData与EDM
OData WebAPI实践-Non-EDM模式