java基础【代理】

70 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。 代理是接口的应用,为其他的对象提供一种控制对这其访问的方式,使用接口作为桥梁。

package com.hike.javase.interfacetest;

/**
 * 代理模式:把代理对象当成代理对象来使用
 *
 * 使用场景1:
 *      无法直接使用被代理对象时。例如租房子时,中介是代理对象,房东是被代理对象,
 *      中介和房东之间需要通过接口来连接,无论是房东还是中介,统一看做可租房子的人。
 *
 * 使用场景2:
 *      增强被代理对象的方法,同时又不能修改被代理类,通过代理类增强业务方法,比如:
 *      租房子时可以支持微信支付宝,应用见HeiZhongJie类。
 *      面向切面编程(AOP),可扩充性强。连接的不仅仅是中介和房东,更是与客户端相连接,统一为接口类型。
 */
interface HouseRent{
    void rent();
}

class FangDong implements HouseRent{
    @Override
    public void rent(){
        System.out.println("我是房东,有房子,但找不到人");
    }
}

class FangDong2 implements HouseRent{
    @Override
    public void rent(){
        System.out.println("我是房东2,有房子,但找不到人");
    }
}

class HeiZhongJie implements HouseRent{

    //关联被代理对象
    private HouseRent houserent = new FangDong2();
    @Override
    public void rent() {
        System.out.println("我是中介,我没有房子,但我有房源,请交中介费");
        houserent.rent(); //被代理对象的方法调用,是一个插件、切面,无论上下怎么变化,此句不变。称为面向切面编程AOP。
        System.out.println("请及时交房租");
        System.out.println("支持微信支付宝:XXX");// 使用场景 2 的应用
    }
}

public class ProxyTest {
    public static void main(String[] args) {
        //客户要租房
        HouseRent houserent = new HeiZhongJie(); //面向接口编程,不看子类的特性,只看它的接口
        houserent.rent();
    }
}