设计模式 -- 代理模式

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();
    }
}

运行结果

餐前:罗翔发现蹊跷,老板你这个菜品太少了啊..
张三吃饭...
餐后:饭店因缺斤少两,老板被迫入狱..
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值