跟MM在网上聊天,她们一开头总是“hi,你好”,“你从哪儿来呀?”“你多大了?”“身高多少呀?”这些话,真烦人,写个程序做为我的Proxy吧,凡是接收到这些话都设置好了自动的回答,接收到其他的话时再通知我回答,怎么样,酷吧。
代理模式意图
代理模式(Proxy)为其他对象提供一种代理以控制对这个对象的访问。
代理模式类图
代理模式实现
/// <summary>
/// 定义RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy
/// </summary>
abstract class Subject
{
public abstract void Operation();
}
/// <summary>
/// Proxy所代表的真实实体
/// </summary>
class RealSubject : Subject
{
Girl mm;
public RealSubject(Girl mm)
{
this.mm = mm;
}
public override void Operation()
{
switch (mm.Word)
{
case "hi,你好":
Console.WriteLine("hi,你好");//设置自动回答
break;
case "你从哪儿来呀?":
Console.WriteLine("火星");//设置自动回答
break;
case "你多大了?":
Console.WriteLine("18");//设置自动回答
break;
case "身高多少呀?":
Console.WriteLine("2.5m");//设置自动回答
break;
default://接收到其他的话时再通知我回答
Say();
break;
}
}
/// <summary>
/// 我回答,具体实现略
/// </summary>
private void Say()
{
Console.WriteLine("我出场了……");
}
}
/// <summary>
/// 保存一个RealSubject引用使得代理可以访问实体并提供一个与Subject相同的接口来代替实体
/// </summary>
class Proxy : Subject
{
RealSubject rs;
public Proxy(Girl mm)
{
rs = new RealSubject(mm);
}
public override void Operation()
{
rs.Operation();
}
}
/// <summary>
/// 聊天的MM
/// </summary>
class Girl
{
private string word;
public string Word
{
get { return word; }
set { word = value; }
}
}
/// <summary>
/// 代理模式客户端应用
/// </summary>
class Program
{
static void Main(string[] args)
{
//MM:“hi,你好”“你从哪儿来呀?”“你多大了?”“身高多少呀?”
Girl mm = new Girl();
mm.Word = "hi,你好";
//代理替我聊天
Proxy proxy = new Proxy(mm);
proxy.Operation();
Console.Read();
}
}
代理模式总结
吼吼,这是不是就是传说中的机器人聊天原理啊!代理模式给某一个对象提供一个代理对象,由代理对象控制对源对象的引用。代理就是一个人或一个结构代表另一个人或者一个机构采取行动。我们身边到处都是代理模式,如远程代理、虚拟代理、安全代理、智能指引等。