欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

Java代理模式的示例详解

时间:2022-11-06 09:22:52|栏目:JAVA代码|点击:

定义

代理模式(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();
    }
}

查看结果

总结

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

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

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

上一篇:Java中Properties类的操作实例详解

栏    目:JAVA代码

下一篇:如何使用BufferedReader循环读文件

本文标题:Java代理模式的示例详解

本文地址:http://www.codeinn.net/misctech/218342.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有