public class Context{
/**
* Context 引用环境
* ExecutorDecorator.apply(原始的executor)返回装饰对象,
* 该装饰对象和原始对象实现了同一接口
* 该装饰对象内部持有了Context的原始executor
*/
private Executor decorateExecutor =ExecutorDecorator.apply( new Executor() {
@Override
public void execute(Runnable command) {
System.out.println("执行顺序-4-Context.originalExecutor.execute");
command.run();
}
});
private Runnable originalTask = new Runnable() {
@Override
public void run() {
System.out.println("执行顺序-6-Context.originalTask.run");
}
};
public void execute(){
this.decorateExecutor.execute(originalTask);
}
public static void main(String[] args) {
//只会执行ExecutorDecorator.apply 不会执行apply2,所以只打印1
Context context= new Context();
System.out.println("-----------------");
//调用2,3。。。。6
context.execute();
}
}
public final class ExecutorDecorator {
public static Executor apply(final Executor executor) {
System.out.println( "执行顺序-1-ExecutorDecorator.apply");
return new Executor() {
@Override
public void execute(final Runnable command) {
System.out.println("执行顺序-2-ExecutorDecorator.apply.execute");
executor.execute(apply2(command));
}
};
}
public static Runnable apply2(final Runnable command) {
System.out.println("执行顺序-3-ThreadExecutorMap.apply2");
return new Runnable() {
@Override
public void run() {
System.out.println("执行顺序-5-ThreadExecutorMap.apply2.run");
try {
command.run();
} finally {
}
}
};
}
}