您的位置:首页 > 其它

9.3.4: 常见设计模式精讲---代理模式

2014-02-26 08:53 357 查看
第一种:





Image.java:

public interface Image {

void show();
}


BigImage.java:

public class BigImage implements Image {

public BigImage(){
try {
Thread.sleep(3000);
System.out.println("图片装载成功");
} catch (InterruptedException e) {
e.printStackTrace();
}

}
@Override
public void show() {
System.out.println("绘制实际的大图片");
}

}


ImageProxy.java:

public class ImageProxy implements Image {

private Image image;
public ImageProxy(Image image){
this.image=image;
}

@Override
public void show() {
if(image==null){
image=new BigImage();
}
image.show();
}

}


BigImageTest.java:

public class BigImageTest {

public static void main(String[] args) {

long start=System.currentTimeMillis();
Image image=new ImageProxy(null);
System.out.println("系统得到Image对象的系统开销:"+(System.currentTimeMillis()-start));
image.show();
}

}


第二种:





Dog:

public interface Dog {

public void info();
public void run();
}


GunDog:

public class GunDog implements Dog {

@Override
public void info() {
System.out.println("我是一只猎狗");
}

@Override
public void run() {
System.out.println("我奔跑迅速");
}

}


TxUtil.java:

public class TxUtil {

public void beginTX(){
System.out.println("开始事务");
}

public void endTx(){
System.out.println("结束事务");
}
}


MyInvocationHandler.java:

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class MyInvocationHandler implements InvocationHandler {

private Object target;

public void setTarget(Object target){
this.target=target;
}

@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
TxUtil tx=new TxUtil();
tx.beginTX();
Object result=method.invoke(target, args);
tx.endTx();
return result;
}

}


MyProxyFactory.java:

import java.lang.reflect.Proxy;

public class MyProxyFactory {

public static Object getProxy(Object target){
MyInvocationHandler handler=new MyInvocationHandler();
handler.setTarget(target);
return Proxy.newProxyInstance(
target.getClass().getClassLoader(),target.getClass().getInterfaces(),handler);
}

}


ProxyTest.java:

public class ProxyTest {

public static void main(String[] args) {

Dog target=new GunDog();
Dog dog=(Dog) MyProxyFactory.getProxy(target);
dog.info();
System.out.println("------------");
dog.run();
}

}


控制台输出:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: