@Override publicvoidinvoke(Invoker invoker){ System.out.println("filter a before invoker do invoke"); invoker.invoke(); System.out.println("filter a after invoker do invoke"); } }
staticclassFilterBimplementsFilter{ @Override publicvoidinvoke(Invoker invoker){ System.out.println("filter b before invoker do invoke"); invoker.invoke(); System.out.println("filter b after invoker do invoke"); } }
publicstaticvoidmain(String[] args){ List<Filter> filterList = new ArrayList<>(); Filter filterA = new FilterA(); Filter filterB = new FilterB();
filterList.add(filterA); filterList.add(filterB);
Invoker last = new Invoker() { @Override publicvoidinvoke(){ System.out.println("invoker do action"); } };
for (int i = filterList.size() - 1; i >= 0; i--) { Filter filter = filterList.get(i); Invoker next = last; last = new Invoker() { @Override publicvoidinvoke(){ filter.invoke(next); } }; }
last.invoke(); } }
执行结果:
1 2 3 4 5
filter a before invoker do invoke filter b before invoker do invoke invoker do action filter b after invoker do invoke filter a after invoker do invoke