
import blog.inquisitive.util.Decorator;

class Test {
	interface MyInterface {
		String a(int v);
		String b(int v);
		String c(int v);
	}
	static class TestClass implements MyInterface {
		public String a(int v) {
			return "a: "+v;
		}
		public String b(int v) {
			return "b: "+v;
		}
		public String c(int v) {
			return "c: "+v;
		}
	}
	public static void main(String[] argv) throws Exception {
		MyInterface i=Decorator.decorate(new TestClass(),MyInterface.class,new Object(){
			@Decorator.Override
			String a(MyInterface base,int v){
				return "double a: "+(v*2);
			}
			@Decorator.Override
			String b(MyInterface base,int v){
				return "surounded ("+base.b(v)+")";
			}
		});
		System.out.println(i.a(2));
		System.out.println(i.b(2));
		System.out.println(i.c(2));
	}
}

