代理模式就不废话了,这个模式在生活中很常见,打官司、租房子的都需要找个专业的人来替你处理不擅长的事。
鉴于这个模式太常见,我觉得就不用废话,画图啥的统统免了吧,直接上代码
父类
package zl.study.designpattern.proxy;
public interface Graphic {
public void render();
public void store();
public void load();
public void resize();
}
子类
package zl.study.designpattern.proxy;
public class Image implements Graphic{
protected int width,length;
private String file;
public Image(String file){
this.file = file;
}
@Override
public void load() {
this.width = 4;
this.length = 8;
}
@Override
public void render() {
long start = System.currentTimeMillis();
try{
Thread.sleep(100);
}catch(Exception e){
;
}
long end = System.currentTimeMillis();
System.out.println("this operation elapse:"+ (end -start));
}
@Override
public void resize() {
}
@Override
public void store() {
System.out.println(width +""+ length);
}
}
代理
package zl.study.designpattern.proxy;
public class ImageProxy implements Graphic{
private int width,length;
private Image image;
private String file;
public ImageProxy(String file){
this.file = file;
}
@Override
public void load() {
if( null == image){
image = new Image( file);
}
this.length = image.width;
this.width = image.width;
}
@Override
public void render() {
image.length = length;
image.width = width;
image.render();
}
@Override
public void resize() {
width *= 2;
length *=2;
}
@Override
public void store() {
image.length = length;
image.width = width;
}
}
测试类
package zl.study.designpattern.proxy.test;
import zl.study.designpattern.proxy.Graphic;
import zl.study.designpattern.proxy.ImageProxy;
public class ProxyTest {
public static void main(String args[]){
String fileName = "ha.txt";
Graphic image = new ImageProxy(fileName);
image.load();
image.resize();
image.render();
}
}