-
C#教程之c# 代理模式
代理模式的应用:
远程代理,为一个对象在不同的地址空间提供局部代表,可以隐藏一个对象存在于不同地质空间的事实。
虚拟代理,根据需要创建开销很大的对象,通过代理来存放实例化需要很长时间的真实对象。
安全代理,用来控制真实对象的访问权限。
智能代理,当调用代理时,可以代理处理一些额外的功能。
案例场景:
向一位自己心仪的女孩表达爱意,一般我们有两种选择:亲自出马(有自信的人)和 使用‘媒婆'(比较害羞)。
其中使用‘媒婆'就是代理行为,我们实现如下:调用代理模式的主函数:
12345678910111213141516171819class
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类是代表女孩对象,实现如下:
123456789public
class
SchoolGirl
{
private
string
name;
public
string
Name
{
get
;
set
;
}
}
Pursuit类是代表一个真实的事物(追求女孩的追求者),实现如下:
1234567891011121314151617181920public
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类的代表,实现如下:
1234567891011121314151617181920public
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接口,实现如下:
123456interface
IGiveGift
{
void
GiveDolls();
void
GiveFlowers();
void
GiveChocolate();
}
我们看一张代理模式的结构图:
栏目列表
最新更新
C#基于接口设计三层架构Unity篇
C#线程 入门
C#读取静态类常量属性和值
C# 插件式编程
C# 委托与事件有啥区别?
C#队列学习笔记:队列(Queue)和堆栈(Stack
linq 多表分组左连接查询查询统计
C#队列学习笔记:MSMQ入门一
C# 基础知识系列- 1 数据类型
二、C#入门—基础语法
C# 在Word中添加Latex 数学公式和符号
inncheck命令 – 检查语法
基于UDP的服务器端和客户端
再谈UDP和TCP
在socket编程中使用域名
网络数据传输时的大小端问题
socket编程实现文件传输功能
如何优雅地断开TCP连接?
图解TCP四次握手断开连接
详细分析TCP数据的传输过程
SqlServer 利用游标批量更新数据
BOS只读状态修改
SQL Server等待事件—PAGEIOLATCH_EX
数据库多行转换为单一列
获取数据表最后最后访问,修改,更新,
计算经历的时间
SQL查询结果自定义排序
修改数据库默认位置
日期简单加或减
从日期获取年,月或日