php,java实现代理模式

普通代理模式类似于装饰者模式,将真实的实现逻辑的对象包装起来,外界通过访问其代理来调用真是的逻辑代码

类图
这里写图片描述

java代码实现

public interface Subject {

    public void request();
}
public class RealSubject implements Subject {

    @Override
    public void request() {

    }
}
public class Proxy implements Subject{

    private Subject subject = null;

    public Proxy(Subject subject){
        this.subject = subject;
    }

    @Override
    public void request() {
        subject.request();
    }
}

php实现

interface Subject
{
    public function request();
}

class RealSubject implements Subject
{
    public function request()
    {
        echo 'RealSubject';
    }
}

class Proxy implements Subject
{
    private $subject;

    public function __construct(Subject $subject)
    {
        $this->subject = $subject;
    }

    public function request()
    {
        $this->subject->request();
    }
}

$realSubject = new RealSubject;
$proxy = new Proxy($realSubject);
$proxy->request();

以上为普通的代理模式,如果需求要求隐藏真是的实现类,只通过代理类与外界交流,可以用如下实现

java实现

public interface Subject {

    public void request();
}
public class RealSubject implements Subject {
    private static final String GENRATION_OBJECT_KEY = "1";

    public RealSubject(String key) throws Exception{
        if(!GENRATION_OBJECT_KEY.equals(key)){
            throw new Exception();
        }

    }

    @Override
    public void request() {

    }
}
public class Proxy implements Subject{

    private Subject subject = null;

    public Proxy(String key) throws Exception{
        this.subject = new RealSubject(key);
    }

    @Override
    public void request() {
        subject.request();
    }
}

php实现

interface Subject
{
    public function request();
}

class RealSubject implements Subject
{
    const GENERATION_OBJ_KEY = '1';

    public function __construct($key)
    {
        if(!($key == self::GENERATION_OBJ_KEY))
        {
            throw new Exception();
        }
    }

    public function request()
    {
        echo 'RealSubject';
    }
}

class Proxy implements Subject
{
    private $subject;

    public function __construct($key)
    {
        $this->subject = new RealSubject($key);
    }

    public function request()
    {
        $this->subject->request();
    }
}

$proxy = new Proxy(1);
$proxy->request();

强制代理,就是当你访问真实逻辑对象时,轻质返回给你他的代理,如果不通过代理,无法访问对象。

java代码实现

public interface Subject {

    public void request();

    public Subject getProxy();
}
public class RealSubject implements Subject {

    private Subject proxy = null;

    public RealSubject() {

    }

    @Override
    public void request() {
        if(isProxy()){

        }else{
            System.out.print("no proxxy");
        }
    }

    @Override
    public Subject getProxy() {
        proxy = new Proxy(this);
        return proxy;
    }

    private boolean isProxy() {
        if (proxy == null){
            return false;
        }
        return true;
    }

}
public class Proxy implements Subject{

    private Subject subject;

    public Proxy(Subject subject){
        this.subject = subject;
    }

    @Override
    public void request() {
        this.subject.request();
    }

    @Override
    public Subject getProxy() {
        return this;
    }
}

php实现

interface Subject
{
    public function request();

    public function getProxy();
}

class RealSubject implements Subject
{
    private $proxy;

    public function __construct()
    {
    }

    public function getProxy()
    {
        $this->proxy = new Proxy($this);
        return $this->proxy;
    }


    public function request()
    {
        if($this->isProxy())
        {
            echo 'RealSubject';
        }
        else
        {
            echo 'no proxy';
        }
    }

    private function isProxy()
    {
        if(!empty($this->proxy))
        {
            return true;
        }
        return false;
    }
}

class Proxy implements Subject
{
    private $subject;

    public function __construct(Subject $subject)
    {
        $this->subject = $subject;
    }

    public function request()
    {
        $this->subject->request();
    }

    public function getProxy()
    {
        return $this;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值