您的位置:首页 > 编程语言 > Java开发

java 代理模式

2016-03-28 14:38 381 查看
通过此例说明代理模式的作用,在创建一个对象需要很大系统开销的时候,我们只需要给用户一个代理对象,而在需要使用对象的时候,再去实例化对象,从而减少不必要的系统开销

加载一个很大的图片模拟系统开销

图片接口

package com.meteor.design_pattern.proxy;

/**
* Created by Meteor on 2016/3/27.
*/
public interface Image {
void show();
}


加载大图片的实现

package com.meteor.design_pattern.proxy;

/**
* 使用该BigImage模拟一个很大的图片
* Created by Meteor on 2016/3/27.
*/
public class BigImage implements Image {

public BigImage(){
try {
//暂停模拟系统开销
Thread.sleep(3000);
System.out.println("图片装在成功");
} catch (InterruptedException e) {
e.printStackTrace();
}
}

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


图片的代理

package com.meteor.design_pattern.proxy;

/**
* Created by Meteor on 2016/3/27.
*/
public class ImageProxy implements Image{
private Image image;

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

/**
* overide show()
* 该方法用于控制对被代理对象的访问
* 并根据需要负责创建和删除被代理对象
*/
public void show(){
if(image == null){
image = new BigImage();
}
image.show();
}
}


TEST

package com.meteor.design_pattern.proxy;

/**
* Created by Meteor on 2016/3/27.
*/
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()方法时,程序才会真正创建被代理对象
image.show();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 代理模式 proxy