乐趣区

关于设计模式:设计模式之代理模式

代理模式定义

  • 顾名思义,代理模式就是应用代理的形式来拜访具体对象,而不是间接拜访对象。目标是提供一种代理也就是中间层来管制对实在对象的拜访,应用代理方不须要关怀实在对象外部的具体实现。
  • 举个例子,咱们平时坐火车能够到火车站售票处进行购票,也能够到代售点购票,代售点能够了解是火车站的一个售票代理。假如火车站售票处有售票、退票、改签所有服务,但只容许代售点只能售票、退票,不反对改签操作。这里代售点就是一个代理。

UML 类图

PHP 代码实现

<?php
interface ITicket
{public function buyTicket();
    public function returnTicket();}

class Ticket implements ITicket
{public function buyTicket()
    {echo '购票';}

    public function returnTicket()
    {echo '退票';}

    public function changeTicket()
    {echo '改签';}
}

/**
 * 代理对象,代售点仅反对购票 / 退票
 */
class TicketProxy implements ITicket
{

    protected $ticket;
    public function __construct(Ticket $ticket)
    {$this->ticket = $ticket;}

    public function buyTicket()
    {$this->ticket->buyTicket();
    }

    public function returnTicket()
    {$this->ticket->returnTicket();
    }
}

$obj = new TicketProxy(new Ticket());
$obj->buyTicket();

应用场景

  • 近程代理。
  • 虚构代理。
  • Copy-on-Write 代理。
  • 爱护(Protect or Access)代理。
  • Cache 代理。
  • 防火墙(Firewall)代理。
  • 同步化(Synchronization)代理。
  • 智能援用(Smart Reference)代理。
退出移动版