在今天,读书有时是件“麻烦”事。它需要你付出时间,付出精力,还要付出一份心境。--仅以《大话设计模式》来祭奠那逝去的……
代理模式:为其他对象提供一种代理以控制这个对象的访问
1.追MM那点事
一个校园女孩mm,公园散步;小伙子gg,在公园偶遇mm,一见钟情;但是gg不认识mm,没胆送礼物,于是找到代理Proxy,让其帮忙送礼物;
首先定义一个校园女孩mm,让其在公园散步
/// <summary>
/// 校园女孩类
/// </summary>
public class SchoolGirl
{
public string Name { get; set; }
}
其次,分析送礼物这个事,是gg送礼物,而不是proxy要送礼物,proxy只是帮忙送礼物。因此gg和proxy都有送礼物这个动作。抽象出来一个接口GiveGift
/// <summary>
/// 送礼物接口
/// </summary>
public interface GiveGift
{
void GiveDolls();
void GiveFlowers();
}
gg对女孩一见钟情,要送礼物给女孩(将女孩的照片内置到追求者心中==类中),所以定义一个最求者类,并包含几个送礼物的方法
/// <summary>
/// 追求者类
/// </summary>
public class Pursuit : GiveGift
{
protected SchoolGirl mm;
public Pursuit(SchoolGirl mm)
{
this.mm = mm;
}
public void GiveDolls()
{
Console.WriteLine(mm.Name + "送你洋娃娃");
}
public void GiveFlowers()
{
Console.WriteLine(mm.Name + "送你鲜花");
}
}
gg是个笨蛋,想送不敢自己去,要找代理帮他送。定义一个代理类,帮他送礼物
/// <summary>
/// 代理类
/// </summary>
public class Proxyor : GiveGift
{
Pursuit gg;
public Proxyor(Pursuit gg)
{
this.gg = gg;
}
public void GiveDolls()
{
gg.GiveDolls();
}
public void GiveFlowers()
{
gg.GiveFlowers();
}
}
回放整个gg追求mm的过程
static void Main(string[] args)
{
//一个校园女孩mm,公园散步
SchoolGirl mm = new SchoolGirl();
mm.Name = "娇娇";
//小伙子gg,在公园偶遇mm,一见钟情
Pursuit gg = new Pursuit(mm);
//但是gg不认识mm,没胆送礼物,于是找到代理Proxy,让其帮忙送礼物
Proxyor proxy = new Proxyor(gg);
proxy.GiveDolls();
proxy.GiveFlowers();
}
有图有真相