Java设计模式之代理模式--经纪人的工作

这篇具有很好参考价值的文章主要介绍了Java设计模式之代理模式--经纪人的工作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

本文主要讲述代理模式,文中使用通俗易懂的案例,使你更好的学习本章知识点并理解原理,做到有道无术。

一.什么是代理模式

代理模式是23种设计模式中结构型模式的一种,它的核心是通过代理类来完成其他对象的访问,降低访问者和被访问者的耦合度,也对功能进行了增强。

二.生活中的代理模式

1.经纪人

每个艺人都拥有自己的经纪人,帮助他处理工作上的事情,例如帮艺人接活、商务谈判、宣传包装等等,如果我们想联系上哪位艺人,主要就是通过经纪人来完成,而经纪人就跟设计模式中的代理模式类似。

Java设计模式之代理模式--经纪人的工作

2.房产中介

现在很多年轻人在大城市工作都是租房住的,大家现在购买房子或者租房的话是不是通过房产中介呢,反正是通过房产中介找到房子的,而房产中介他是负责帮助房主出售或者出租房子的,通过房产中介我们就无需每个房子都需要通过联系房主来获取房源信息,大大提高了我们选房效率,而房产中介就跟设计模式中的代理模式类似。

Java设计模式之代理模式--经纪人的工作

3.婚介

现在有很多婚介公司或者各种APP来帮助大家扩展社交范围,认识更多的人,提升恋爱率和结婚率。而婚介公司或者各种交友APP就跟设计模式中的代理模式类似。

Java设计模式之代理模式--经纪人的工作

三.代理模式的实现

代理模式有两种,一种是静态代理,一种是动态代理

1.静态代理

接下来就以演员和经纪人来举例,通过静态代理来实现。先创建一个接口和被代理对象类演员类以及静态代理类经纪人类

package com.qianfeng.ran;

/*
 * @author:江帅
 *      接口
 *          人类接口
 */
public interface Human {
    void behavior();
}



/*
 * @author:江帅
 *      被代理对象类
 *              演员类
 */
class Actor implements Human{
    @Override
    public void behavior() {
        System.out.println("某某明星进行拍戏");
    }
}



/*
 * @author:江帅
 *      静态代理类
 *          经纪人
 */
class Broker implements Human{
    private Human human;
    //获取具体的明星对象
    public Broker(Human human){
        this.human = human;
    }
    @Override
    public void behavior() {
        System.out.println("接商演");
        System.out.println("安排行程");
        human.behavior();
        System.out.println("后续工作进行");
    }
}

然后创建一个客户端使用代理模式,完成通过经纪人联系演员让演员拍戏,并增强功能

package com.qianfeng.ran;

/*
 * @author:江帅
 *          客户端
 */
public class Demo {
    public static void main(String[] args) {
        //创建明星对象
        Actor actor = new Actor();

        //创建经纪人对象并传递明星对象
        Broker broker = new Broker(actor);
        //执行结果:
        //接商演
        //安排行程
        //某某明星进行拍戏
        //后续工作进行
        broker.behavior();
    }
}

2.动态代理

接下来我们以房产中介的来举例,使用动态代理来实现。先创建代理接口人类接口和被代理对象类用户类

package com.qianfeng.ran;

/*
 * @author:江帅
 *          接口
 *              人类接口
 */
public interface Human {
    void behavior();
}



/*
 * @author:江帅
 *          被代理对象类
 *              用户
 */
public class User implements Human{
    @Override
    public void behavior() {
        System.out.println("租房");
    }
}

再创建一个动态代理类房产中介类

package com.qianfeng.ran;
/*
 * @author:江帅
 *         动态代理类
 *              房产中介
 */
public class DynamicProxy implements InvocationHandler {
    //需要被代理的对象
    private Object obj;

    public Object newInstance(Object obj){
        this.obj = obj;
        /**
         *  第一个参数为被代理对象的类加载器
         *  第二个参数为被代理对象的接口
         *  第三个此参数为当前对象
         */
        return Proxy.newProxyInstance(obj.getClass().getClassLoader()
                ,obj.getClass().getInterfaces(),
                this);
    }

    /**
     *  调用被代理对象的方法都会经过该方法
     * @param proxy 代理对象的引用
     * @param method 被调用的方法对象
     * @param args  被调用方法的参数数组
     * @return		原方法的返回值
     * @throws Throwable
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        start();
        //调用被代理对象的方法
        Object respBean = method.invoke(obj, args);
        commit();
        return respBean;
    }

    public void start(){
        System.out.println("带客户看房子");
    }

    public void commit(){
        System.out.println("与客户签署合同");
    }
}

最后动态代理实现通过房产中介增强用户寻找房子的行为

package com.qianfeng.ran;

/*
 * @author:江帅
 *      客户端
 */
public class Demo {
    public static void main(String[] args) {
        //创建房产中介            --  代理对象类
        DynamicProxy proxy = new DynamicProxy();

        //通过房产中介找房子     --   调用代理对象的方法并传递被代理对象,实现增强
        Human human = (Human) proxy.newInstance(new User());
        //执行结果:
        //带客户看房子
        //租房
        //与客户签署合同
        human.behavior();
    }
}

五.总结

代理模式中分为两种代理:静态代理和动态代理

静态代理的实现会导致代理类的冗余,每增加一个被代理对象就需要增加一个代理类。就像一对一的明星经纪人,每多一个明星就需要多一个经纪人。

动态代理的实现则减少了代理类的冗余,只需要一个动态代理类即可,但是会对被代理的对象每个方法都进行增强。就像房产中介,每多个客户并不需要再额外多一个中介来服务,房产中介可以一个人对多个用户,但是每个用户得到的都是同一个房产中介的服务。

下一章,将带大家学习电脑与游戏的关系(设计模式之桥接模式)文章来源地址https://www.toymoban.com/news/detail-491645.html

到了这里,关于Java设计模式之代理模式--经纪人的工作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java设计模式(十三)代理模式

    一、概述 代理模式是一种结构型设计模式,它提供了一个代理对象,充当被代理对象的接口,以控制对被代理对象的访问。代理模式可以在不修改被代理对象的情况下,增加额外的功能或控制访问方式。 二、代码 以下是一个示例代码,说明代理模式的使用: 在上述代码中,

    2024年02月04日
    浏览(24)
  • 【Java设计模式005】代理模式

    由于一些特定原因某些对象不适合或者不能直接引用目标对象,这时就可以使用代理模式。代理模式为目标对象提供一个代理以控制访问对象对目标对象的访问。客户端只能直接访问代理对象,不能直接访问目标对象,这么做确保了目标对象的安全。生活中一个常见的例子就

    2024年02月12日
    浏览(31)
  • Java设计模式---单例 工厂 代理模式

    单例模式是设计模式中的一种,属于创建型模式。在软件工程中,单例模式确保一个类只有一个实例,并提供一个全局访问点。这种模式常用于那些需要频繁实例化然后引用,且创建新实例的开销较大的类,例如数据库连接池、缓存管理等。 意图 :保证一个类仅有一个实例

    2024年01月24日
    浏览(39)
  • 基于Java的设计模式 - 代理模式

    代理模式是一种使用代理对象来执行目标对象的方法并在代理对象中增强目标对象方法的一种设计模式。简单来讲就是在不修改目标对象的基础上,增强主业务逻辑的设计模式。 代理模式基本可分为三种 静态代理 JDK动态代理 CGLIB动态代理 上述简单分就是静态和动态代理,静

    2024年02月07日
    浏览(28)
  • Java 与设计模式(13):代理模式

    代理模式是一种结构型设计模式,用于在访问对象时引入一个代理对象,以控制对实际对象的访问。代理对象充当了客户端和实际对象之间的中介,客户端通过代理对象间接地访问实际对象,从而可以在访问过程中添加额外的逻辑或控制。代理模式可以提供对实际对象的保护

    2024年02月09日
    浏览(27)
  • Java设计模式中的代理模式

    Java设计模式中的代理模式 代理模式是一种结构型设计模式,它提供了一个代理对象,以控制对其他对象的访问。代理可以充当中介,用于控制对真实对象的访问。 代码举例演示 静态代理: 动态代理 区别: 静态代理: 代理类在编译时就已经确定,并且需要为每个被代理的

    2024年01月25日
    浏览(30)
  • 【Java 设计模式】结构型之代理模式

    代理模式(Proxy Pattern)是一种结构型设计模式, 它允许通过一个代理对象控制对其他对象的访问 。代理模式在访问对象时引入了一定程度的间接性,使得可以在访问对象前后进行一些额外的操作。在本文中,我们将深入研究Java中代理模式的定义、结构、使用场景以及如何在

    2024年01月21日
    浏览(37)
  • Java复习-20-接口(3)- 代理设计模式

    功能:可以帮助用户将所有的开发注意力只集中在核心业务功能的处理上。 代理模式(Proxy Pattern)是一种结构性模式。代理模式为一个对象提供了一个替身,以控制对这个对象的访问。即通过代理对象访问目标目标对象,可以在目标对象实现的基础上,增强额外的功能操作,即

    2024年02月09日
    浏览(29)
  • Java 设计者模式以及与Spring关系(四) 代理模式

    目录 简介: 23设计者模式以及重点模式 代理模式(Proxy Pattern) 静态代理示例 spring中应用 动态代理 1.基于JDK的动态代理 target.getClass().getInterfaces()作用 内名内部类写法(更简洁,但不推荐) 2.基于CGLIB实现 spring中应用 本文是个系列一次会出两个设计者模式作用,如果有关联就三

    2024年01月23日
    浏览(34)
  • JAVA设计模式6:代理模式,用于控制对目标对象的访问

    作者主页 :Designer 小郑 作者简介 :3年JAVA全栈开发经验,专注JAVA技术、系统定制、远程指导,致力于企业数字化转型,CSDN博客专家,阿里云社区专家博主,蓝桥云课讲师。 代理模式是一种常用的设计模式,它提供了一个代理对象,用于控制对目标对象的访问 。 在代理模式

    2024年02月07日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包