/**
* 书本:《Thinking In Java》
* 功能:动态代理机制
* 文件:SimpleProxyDemo.java
* 时间:2015年4月15日21:41:39
* 作者:cutter_point
*/
package Lesson14TypeInformation;
import static net.mindview.util.Print.*;
interface Interface
{ //一个接口提供两个方法
void doSomething();
void somethingElse(String arg);
}
class RealObject implements Interface
{//实现接口
@Override
public void doSomething()
{
print("doSomething");
}
@Override
public void somethingElse(String arg)
{
print("somthingElse " + arg);
}
}
class SimpleProxy implements Interface
{//实现两个接口之后,在加上了一个变量
private Interface proxied;
public SimpleProxy(Interface proxied)
{
this.proxied = proxied;
}
public void doSomething()
{
print("SimpleProxy doSomething"); //先实现自己的功能,然后调用传进来的这个接口的功能
proxied.doSomething();
}
public void somethingElse(String arg)
{
print("SimpleProxy somethingElse " + arg);
proxied.somethingElse(arg);
}
}
public class SimpleProxyDemo
{
public static void consumer(Interface iface)
{
iface.doSomething();
iface.somethingElse("bonobo");
}
public static void main(String[] args)
{
consumer(new RealObject());
consumer(new SimpleProxy(new RealObject())); //动态代理
}
}
我就这么说了,可能是我的理解还不够深,我觉得动态代理就是类的组合的使用,用一个类里面使用了另外一个类作为私有变量,实现各种功能,同时还可以执行代理的那个类的各种功能,可以各种拦截,可以判定到底要不要执行这个成员类的方法,或者是执行那个
输出:
doSomething obj1
somthingElse bonobo obj1
SimpleProxy doSomething obj1
doSomething obj1
SimpleProxy somethingElse bonobo obj1
somthingElse bonobo obj1