// 送礼物:红包、花、巧克力
public interface GiveGift
{
void GiveDolls();
void GiveFlowers();
void GiveChocolate();
}
// 送礼物的人
public class Pursuit : GiveGift
{
// 要送的对象
SchoolGirl mm;
public Pursuit(SchoolGirl sg)
{
mm = sg;
}
public void GiveDolls()
{
Console.WriteLine(mm.Name + ", give you dolls");
}
public void GiveFlowers()
{
Console.WriteLine(mm.Name + ", give you flower");
}
public void GiveChocolate()
{
Console.WriteLine(mm.Name + ", give you chocolate");
}
}
public class SchoolGirl
{
public string Name { get; set; }
}
// 代理送礼物
public class Proxy : GiveGift
{
// 实际的送礼人
public Pursuit pp;
// 入参:要送的对象
public Proxy(SchoolGirl sg)
{
pp = new Pursuit(sg);
}
public void GiveChocolate()
{
pp.GiveChocolate();
}
public void GiveDolls()
{
pp.GiveDolls();
}
public void GiveFlowers()
{
pp.GiveFlowers();
}
}
业务代码:
SchoolGirl mm = new SchoolGirl() { Name = "na" };
Model.Proxy px = new Model.Proxy(mm);
px.GiveChocolate();
px.GiveDolls();
px.GiveFlowers();
本来是小刚要给小红送花、巧克力、假币,但是小刚有点害羞,让小方作为代理送给小红。
小刚和小方都继承自 GiveGift 接口,都有送礼物的功能
送者 关联 被送者对象,代理 关联 送者对象,代理和送者都接受一个入参:被送者对象,区别是代理接受被送者对象之后,生成关联被送者对象的送者。
适用代理:
graph LR
送者--送-->被送者
使用代理:
graph LR
送者--继承-->送礼
代理--继承-->送礼
sequenceDiagram
代理->>送者: 关联
代理->>送者: 调用
送者->>被送者: 送