专栏首页憧憬博客分享设计模式 | 代理模式

设计模式 | 代理模式

说明

这个设计模式也是比较简单, 先说一下定义:  代理模式(Proxy Pattern) :给某一个对象提供一个代理,并由代理对象控制对原对象的引用。代理模式的英 文叫做Proxy或Surrogate,它是一种对象结构型模式。

代理就是面向客户的, 意思就是代理对象负责接受客户任务, 但是其实并不是真正工作的, 中间商罢了。再不懂来看看?

示例

比方说 客户需要买电脑和修电脑 但是客户并不知道哪里可以有 但是后面他找到了一个人, 他说可以干这个事情, 但是这个人并不会这两个东西, 他可能是电脑商店的代理

<?php
/**
 * Created by 憧憬.
 */


/**
 * 电脑商店约束
 * Interface ComputerShop
 */
interface ComputerShop {

    // 修理电脑
    public function repair();


    // 出售电脑
    public function sell();
}


/**
 * Dell 电脑商店
 * Class DellComputerShop
 */
class DellComputerShop implements ComputerShop {

    public function repair()
    {
        echo 'dell 电脑修理';
    }

    public function sell()
    {
        echo 'dell 电脑出售';
    }
}


/**
 * mac 电脑商店
 * Class MacComputerShop
 */
class MacComputerShop implements ComputerShop {
    public function repair()
    {
        echo 'mac 电脑修理';
    }

    public function sell()
    {
        echo 'mac 电脑出售';
    }

}

/**
 * 代理人
 * Class Proxy
 */
class Proxy implements ComputerShop
{
    public $computerShop;

    /**
     * Proxy constructor.
     * @param $computerShop
     */
    public function __construct(ComputerShop $computerShop)
    {
        $this->computerShop = $computerShop;
    }

    public function repair()
    {
        $this->computerShop->repair();
    }

    public function sell()
    {
        $this->computerShop->sell();
    }
}

//$dellProxy = new Proxy(new MacComputerShop());
$dellProxy = new Proxy(new DellComputerShop());

$dellProxy->repair();

这个设计模式主要是利用了语言的多态, 干活的是被代理类, 接活的是代理类。你可以让代理干活, 代理给幕后干, 最终事情做的漂亮就行。

本文为作者原创,手码不易,允许转载,转载后请以链接形式说明文章出处。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 设计模式 | 抽象工厂模式

    这个也是工厂模式, 我们看过简单工厂, 简单工厂会让该工厂的职责越来越重。这里有个抽象工厂, 为了解决由于工厂方法模式中每个工厂只创建一类实例对象, 导致工厂类...

    憧憬博客
  • 设计模式 | 策略模式

    定义:将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,并让它们可以相互替换,这种模式就是策略模式。

    憧憬博客
  • 设计模式 | 桥接模式

    在开发过程中,我们很多类具都是具有两个或多个维度以上的,例如 图形可以按照形状分,也可以按照颜色分。

    憧憬博客
  • 电脑中毒的表现有哪些?电脑中毒了怎么办

    电脑中毒是一种十分普遍的现象,很多人在电脑中毒以后,不知如何是好,害怕电脑当中的重要信息暴露,这时我们该怎么办呢?一般情况下,电脑如果被病毒侵染,当电脑关机的时...

    FreeRonin
  • Nature子刊封面:将拓扑应用于机器学习,提升神经网络可解释性

    葡萄牙里斯本,一支来自意大利的数学家团队,和几位Champalimaud未知中心(CCU)的神经科学家,正在兴奋地讨论着刚刚被发表在Nature Machine...

    新智元
  • 西部数据My Cloud存储设备被曝可提权认证绕过漏洞

    近期,网络设备漏洞研究团队exploitee.rs公布,西部数据 My Cloud 网络存储设备存在一个认证绕过漏洞( CVE-2018-17153),未授权的...

    FB客服
  • 西部数据My Cloud NAS设备曝大量高危漏洞

    “用指尖改变世界” ? 安全研究人员在西部数据公司(Western Digital)的My Cloud NAS设备中发现了几个严重的漏洞和一个采用硬编码的后门程...

    企鹅号小编
  • Appium自动化(8) - 可定位的控件属性

    https://www.cnblogs.com/poloyy/category/1693896.html

    小菠萝测试笔记
  • 腾讯云方勇:TFC 全球泛游戏大会谈棋牌游戏安全防护

    腾讯云安全
  • 用VS2017进行移动开发(C#、VB.NET)——OfflineCameraButton控件,Smobiler移动开发

    若将该属性设置为“0”,该控件的背景色即为全透明的,显示为Smobiler窗体设计界面的背景色。

    Amanda.li

扫码关注云+社区

领取腾讯云代金券