代理模式:对外提供对原对象的一个访问方式。通过代理,可以在被代理的方法上统一做一些业务处理,比如说事务、异常、参数等校验
1、类图
2、方案一:使用方法时创建代理
public abstract class AbstractExport {
protected String exportType;
public abstract void export();
}
public class SyncExport extends AbstractExport {
public SyncExport() {
super.exportType = "SYNC";
System.out.println("init sync export");
}
@Override
public void export() {
System.out.println("export type:" + super.exportType);
}
}
public class ProxySyncExport extends AbstractExport {
private AbstractExport export;
public ProxySyncExport() {
super.exportType = "REAL_SYNC";
}
@Override
public void export() {
if (export == null) {
export = new SyncExport();
}
export.export();
}
}
public class ExportTest {
public static void main(String[] args) {
AbstractExport export = new ProxySyncExport();
export.export();
export.export();
}
}
3、方案二:构造时初始化
public abstract class AbstractExport {
protected String exportType;
public abstract void export();
}
public class SyncExport extends AbstractExport {
public SyncExport() {
super.exportType = "SYNC";
System.out.println("init sync export");
}
@Override
public void export() {
System.out.println("export type:" + super.exportType);
}
}
public class ProxyQuickExport extends AbstractExport {
private AbstractExport export;
public ProxyQuickExport(AbstractExport export) {
super.exportType = "QUICK_SYNC";
this.export = export;
}
@Override
public void export() {
export.export();
}
}
public class QuickExportTest {
public static void main(String[] args) {
SyncExport syncExport = new SyncExport();
AbstractExport export = new ProxyQuickExport(syncExport);
export.export();
export.export();
}
}