普通代理模式类似于装饰者模式,将真实的实现逻辑的对象包装起来,外界通过访问其代理来调用真是的逻辑代码
类图
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;
}
}