码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之结构型模式—— 2.7 代理模式

时间:2015-02-17 23:40:09      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:设计模式   代理模式

<?php
/**
 * 2.7 代理模式
 * 定义:
 *      为其他对象提供一种代理以控制对这个对象的访问。
 * 角色:
 *      1. 代理抽象角色
 *          职责:统一代理和被代理角色接口
 *      2. 被代理角色
 *          职责:
 *      3. 代理角色
 *          职责:代理角色2,并对角色2进行访问控制.
 * 优点:
 *      1. 职责清晰
 *      2. 高扩展性
 *      3. 智能化
 * 缺点:
 *      1. 由于客户端和真实主题之家增加了代理对象,因此有些
 *         类型的代理模式可能会造成请求的处理速度慢。
 *      2. 实现代理模式需要额外,有些代理模式的实现非常复杂
 * 使用场景:
 *      1. 远程代理
 *      2. 虚拟代理
 *      3. 安全代理
 *      4. 智能指引
 */

header(‘content-type:text/html;charset=utf8‘);
//被追求者类
class SchoolGirl{
    private $name;
    public function __construct($name){
        $this->name=$name;
    }
    public function getName(){
        return $this->name;
    }
}

//代理接口。针对接口编程,符合了依赖倒转原则。
abstract class GiveGift{
    abstract public function giveDolls();
    abstract public function giveFlowers();
    abstract public function giveChocolate();
}
//追求者类
class Pursuit extends GiveGift{
    private $mm;
    public function __construct(SchoolGirl $mm){
        $this->mm=$mm;
    }
    public function giveDolls(){
        echo $this->mm->getName().‘送你洋娃娃‘;
    }
    public function giveFlowers(){
        echo $this->mm->getName().‘送你鲜花‘;
    }
    public function giveChocolate(){
        echo $this->mm->getName().‘送你巧克力‘;
    }
}
//代理者,它与追求者的功能(方法)一样,只不过起到了一个
//代理的作用,实际的东西(功能)依然是追求者的。代理者
//送的东西依然是追求者的。
class Proxy extends GiveGift{
    private $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();
    }
}

//客户端
$proxy1=new Proxy(new SchoolGirl(‘韩梅梅‘));
$proxy1->giveDolls();
echo ‘<br/>‘;
$proxy1->giveFlowers();
echo ‘<br/>‘;
$proxy1->giveChocolate();


本文出自 “一切皆有可能” 博客,请务必保留此出处http://noican.blog.51cto.com/4081966/1614782

设计模式之结构型模式—— 2.7 代理模式

标签:设计模式   代理模式

原文地址:http://noican.blog.51cto.com/4081966/1614782

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!