1. 静态代理 美国战争
美国的战争服务类
public class AmericanWarnService {
public void fire() {
System.out.println("发动美国想要的战争...");
}
}
美国的战争代理人
public class AmericanWarnProxy {
public void fire() {
beforeFire();
AmericanWarnService americanWarnService = new AmericanWarnService();
americanWarnService.fire();
afterFire();
}
private void afterFire() {
System.out.println("战争后:世界更混乱了..");
}
private void beforeFire() {
System.out.println("战争开始前:代理人从美国获得好处和武器支持..");
}
}
测试类
public class Test {
public static void main(String[] args) {
AmericanWarnProxy americanWarnProxy = new AmericanWarnProxy();
americanWarnProxy.fire();
}
}
运行结果
战争开始前:代理人从美国获得好处和武器支持..
发动美国想要的战争...
战争后:世界更混乱了..
2. 动态代理 张三吃饭
首先张三是个人,他可以吃饭
public interface Person {
void havingDinner();
}
张三本三
public class ZhangSan implements Person {
@Override
public void havingDinner() {
System.out.println("张三吃饭...");
}
}
张三的代理人 – 罗翔
public class LuoXiangProxy implements InvocationHandler {
private Person target;
public LuoXiangProxy(Person target) {
this.target = target;
}
public Object bind() {
Class<? extends Person> clazz = target.getClass();
return Proxy.newProxyInstance(clazz.getClassLoader(), clazz.getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
beforeDinner();
Object object = method.invoke(target, args);
afterDinner();
return object;
}
private void beforeDinner() {
System.out.println("餐前:罗翔发现蹊跷,老板你这个菜品太少了啊..");
}
private void afterDinner() {
System.out.println("餐后:饭店因缺斤少两,老板被迫入狱..");
}
}
测试类
public class Test {
public static void main(String[] args) {
Person zhangSan = new ZhangSan();
Person luoXiang = (Person) new LuoXiangProxy(zhangSan).bind();
luoXiang.havingDinner();
}
}
运行结果
餐前:罗翔发现蹊跷,老板你这个菜品太少了啊..
张三吃饭...
餐后:饭店因缺斤少两,老板被迫入狱..