设计模式-代理模式

案例:卓贾易拜托戴励给娇娇送礼物,追求娇娇

小菜的第一版代码(没有代理的代码):

//追求者类
class Pursuit {
    public $mm;

    public function __construct(SchoolGirl $mm)
    {
        $this->mm = $mm;
    }

    public function GiveDolls()
    {
        echo "{$this->mm->GetName()} 送你洋娃娃\n";
    }

    public function GiveFlowers()
    {
        echo "{$this->mm->GetName()} 送你鲜花\n";
    }

    public function GiveChocolate()
    {
        echo "{$this->mm->GetName()} 送你巧克力\n";
    }
}

//被追求者类
class SchoolGirl {
    private $name;

    public function SetName($name)
    {
        $this->name = $name;
    }

    public function GetName()
    {
        return $this->name;
    }
}

//客户端代码
$jiaojiao = new  SchoolGirl();
$jiaojiao->SetName("李娇娇");
$zhuojiayi = new Pursuit($jiaojiao);
$zhuojiayi->GiveDolls();
$zhuojiayi->GiveFlowers();
$zhuojiayi->GiveChocolate();

此版代码有个问题,$zhuojiayi = new Pursuit($jiaojiao);这里娇娇并不认识卓贾易。

小菜的第二版代码(只有代理的代码):

//被追求者类
class SchoolGirl {
    private $name;

    public function SetName($name)
    {
        $this->name = $name;
    }

    public function GetName()
    {
        return $this->name;
    }
}

//代理类
class Proxy {
    public $mm;

    public function __construct(SchoolGirl $mm)
    {
        $this->mm = $mm;
    }

    public function GiveDolls()
    {
        echo "{$this->mm->GetName()} 送你洋娃娃\n";
    }

    public function GiveFlowers()
    {
        echo "{$this->mm->GetName()} 送你鲜花\n";
    }

    public function GiveChocolate()
    {
        echo "{$this->mm->GetName()} 送你巧克力\n";
    }
}

//客户端代码
$jiaojiao = new  SchoolGirl();
$jiaojiao->SetName("李娇娇");
$daili = new Proxy($jiaojiao);
$daili->GiveDolls();
$daili->GiveFlowers();
$daili->GiveChocolate();

此版代码还是有问题,$daili = new Proxy($jiaojiao);虽然送花的变成了戴励,但是没有了卓贾易什么事了,变成戴励直接追娇娇了。

小菜的第三版代码:

//代理送礼物接口
interface IGiveGift {
    public function GiveDolls();
    public function GiveFlowers();
    public function GiveChocolate();
}

//被追求者类
class SchoolGirl {
    private $name;

    public function SetName($name)
    {
        $this->name = $name;
    }

    public function GetName()
    {
        return $this->name;
    }
}

//追求者类
class Pursuit implements IGiveGift {
    public $mm;

    public function __construct(SchoolGirl $mm)
    {
        $this->mm = $mm;
    }

    public function GiveDolls()
    {
        echo "{$this->mm->GetName()} 送你洋娃娃\n";
    }

    public function GiveFlowers()
    {
        echo "{$this->mm->GetName()} 送你鲜花\n";
    }

    public function GiveChocolate()
    {
        echo "{$this->mm->GetName()} 送你巧克力\n";
    }
}

//代理类
class Proxy implements IGiveGift {
    public $gg;

    public function __construct(SchoolGirl $mm)
    {
        $this->gg = new Pursuit($mm);
    }

    public function GiveDolls()
    {
        $this->gg->GiveDolls();
    }

    public function GiveFlowers()
    {
        $this->gg->GiveFlowers();
    }

    public function GiveChocolate()
    {
        $this->gg->GiveChocolate();
    }
}

//客户端代码
$jiaojiao = new  SchoolGirl();
$jiaojiao->SetName("李娇娇");
$daili = new Proxy($jiaojiao);
$daili->GiveDolls();
$daili->GiveFlowers();
$daili->GiveChocolate();

这样就ok了,娇娇不认识追求她的卓贾易,但是却通过代理人戴励(娇娇认识的)得到礼物。

=============================

注:
代理模式:为其他对象提供一种代理以控制对这个对象的访问。

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PeakXin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值