问题描述
XX想要追求娇娇,但是她自己不好意思,就委托娇娇同伴的AA帮助他,XX给娇娇买了芭比娃娃、花、巧克力,并委托AA送给娇娇。
现在想用程序来描述这个故事,关键在于娇娇不认识XX。
代码实现
被追求者类
public class SchoolGirl
{
public SchoolGirl(string name)
{
mName = name;
}
public string GetName()
{
return mName;
}
private string mName;
}
送礼物的抽象类GiveGift
public interface GiveGift
{
void GiveDolls();
void GiveFlowers();
void GiveChocolate();
}
追求者类实现了送礼物的接口
class Pursuit:GiveGift
{
SchoolGirl mGirl;
public Pursuit(SchoolGirl girl)
{
mGirl = girl;
}
public void GiveDolls()
{
Console.WriteLine(mGirl.GetName() + " give you a doll");
}
public void GiveFlowers()
{
Console.WriteLine(mGirl.GetName() + " give you a Flower");
}
public void GiveChocolate()
{
Console.WriteLine(mGirl.GetName() + " give you a chocolate");
}
}
代理类,唯一即认识追求者,又认识被追求着的类。
class Proxy : GiveGift
{
Pursuit mLickingDog;
public Proxy(SchoolGirl schoolGirl)
{
mLickingDog = new Pursuit(schoolGirl);
}
public void GiveDolls()
{
mLickingDog.GiveDolls();
}
public void GiveFlowers()
{
mLickingDog.GiveFlowers();
}
public void GiveChocolate()
{
mLickingDog.GiveChocolate();
}
}
class Program
{
static void Main(string[] args)
{
SchoolGirl jiaojiao = new SchoolGirl("jiaojiao");
Proxy proxy = new Proxy(jiaojiao);
proxy.GiveDolls();
proxy.GiveFlowers();
proxy.GiveChocolate();
}
}
结构组成
代理模式由三个主要角色组成:
访问接口:这里具体为送礼物的行为
实体类:这个例子中具体为追求者
替代实体的代理类:这个粒子中为代理