亲宝软件园·资讯

展开

Java代理模式

温故知新之java 人气:0

定义

代理模式(Proxy Parttern) 为一个对象提供一个替身,来控制这个对象的访问,即通过代理对象来访问目标对象,这样做的话好处是可以在目标对象实现的基础上,进行额外的功能的扩展。

案例

需求

苹果公司通过苹果代理商来卖手机

方案:静态代理模式

定义抽象接口类,该类在代理模式中扮演的是一个抽象功能的角色,该案例中就是把出售手机抽象为了一个接口

/**
 * 售卖手机的接口(代理模式——抽象角色)
 * @author:liyajie
 * @createTime:2022/2/22 14:42
 * @version:1.0
 */
public interface IPhone {

    /**
     * 出售手机
     * @author: liyajie
     * @date: 2022/2/22 14:44
     * @param
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    void sellPhone();
}

定义苹果手机公司类,该类在代理模式中扮演的是一个目标角色,实现了IPhone接口,重写出售手机的方法

/**
 * 苹果公司(代理模式——目标角色)
 * @author:liyajie
 * @createTime:2022/2/22 14:46
 * @version:1.0
 */
public class TargetPhone implements IPhone {
    @Override
    public void sellPhone() {
        System.out.println("苹果公司正在出售手机");
    }
}

定义代理类,通过代理类进而调用目标类的出售手机的方法,并加上自己的扩展功能

/**
 * 代理商(代理模式——代理角色)
 * @author:liyajie
 * @createTime:2022/2/22 14:50
 * @version:1.0
 */
public class ProxyPhone implements IPhone {

    private IPhone iPhone;

    public ProxyPhone(IPhone iPhone){
        this.iPhone = iPhone;
    }

    @Override
    public void sellPhone() {
        System.out.println("代理商正在循环播放广告,赚取广告商广告费");
        System.out.println("代理商正在推荐自己的电子周边产品,赚取费用");
        iPhone.sellPhone();
        System.out.println("代理商正在卖出苹果手机,赚取差价");
    }
}

代理商赚钱的奥秘尽在下图红框中,卖出了苹果手机赚钱,卖出了其他东西赚钱,广告费也赚钱

定义测试类

/**
 * 测试类
 * @author:liyajie
 * @createTime:2022/2/22 14:55
 * @version:1.0
 */
public class Test {
    public static void main(String[] args) {
        TargetPhone targetPhone = new TargetPhone();
        ProxyPhone proxyPhone = new ProxyPhone(targetPhone);
        proxyPhone.sellPhone();
    }
}

查看结果

总结

该方案采用了静态代理的方式:

优势:可以在不改变目标对象功能的前提下,通过代理对象对目标对象功能进行扩展

劣势:不利于程序的扩展,需要同时维护目标对象和代理对象,程序中会产生大量的代理类,维护成本高

加载全部内容

相关教程
猜你喜欢
用户评论