代理模式,首先举个例子如你想找房子,可以直接跟房主联系,也可以找中介,中介就是房主的代理
在java中,我们首先定义一个接口或抽象类(Subject),然后定义一个实际类就象房主(RealObject)他实现或继承了Subject,然后再定义一个代理类
也就是我们的中介类(ProxyObject),让他和房主一样都实现或继承Subject,并且代理内部引用了真实角色 (RealObject)并用它去完成相关的操作
代码如下所示
Subject 接口
package com.xwei.proxy;
public interface Subject {
public void reduce();
}
RealObject 实际类(房主)
package com.xwei.proxy;
public class RealObject implements Subject {
public void reduce() {
System.out.println("From the RealObject");
}
}
代理类(ProxyObject) 就跟中介一样
package com.xwei.proxy;
public class ProxyObject implements Subject{
//代理内部引用了真实角色
private RealObject realObject;
//
public void reduce()
{
//真正角色操作之前的附加操作 帮你介绍了房子,给点中介费吧
this.preReduce();
if(null==realObject)
{
//房主
realObject = new RealObject();
}
//真正角色去完成的事 房主给你房子
realObject.reduce();
//真正角色操作之后的附加操作 中介
this.postReduce();
}
private void preReduce()
{
System.out.println("pre ClientObject ");
}
private void postReduce()
{
System.out.println("post ClientObject ");
}
}
测试类
package com.xwei.proxy;
public class ClientTest {
/**
* @param args
*/
public static void main(String[] args) {
//你是可以看到代理的
Subject proxyObject = new ProxyObject();
proxyObject.reduce();
}
}
打印结果
pre ClientObject
From the RealObject
post ClientObject