代理模式是JAVA设计模式之一,网上设计模式相关的博文铺天盖地,参考它们有助于自己理解,但是所谓“尽信书不如无书”,在参考的同时也要思考其正确性,写博客也是为了记录自己理解知识点的思路历程和心路历程,所以在经过调研、实践之后能把自己所掌握和理解的东西写下来,无论对错,错了只能说明当下的理解不够完整,更重要的是能够在以后遇到相同的问题时回头看看,反思当初这么写到底有没有问题,毕竟是自己写的,错了还可以进行纠正,想必每个写博客记录自己学习过程的人,都不会刻意去写误导别人的东西,有点扯远了,其实想说的就是不为写而写,更不为凑数而写,要真实地去记录思考的过程,以后的博客也要遵循此原则。

说正事了。代理模式是一种模式,所谓的代理在我们日常生活中也是很常见的,比如我们依靠中介公司租房的时候,不会直接跟房东签署协议,而是通过中介间接地跟房东租房,在租房的过程中房东对我们是不可见的,跟我们直接交涉的人是中介,中介相当于代理,房东把房子的出租权限给中介,让中介代理他出租自己的房子,这就是代理模式。在java中代理模式分为静态代理和动态代理两种,动态代理又有JDK和CGLIB两种实现方式,下面依次介绍。

一、静态代理

静态代理的实现要求代理对象和真实对象实现同一个接口,然后在代理类中维护一个指向接口的真实对象,调用真实对象的实现逻辑即可,这样当用户向代理对象发送请求的时候,从用户角度来看处理请求逻辑的是代理对象,屏蔽了真实对象,但是只有代理对象知道,真正做事情的是真实对象。所以可以分三步实现静态代理:

1⃣️创建一个接口;

2⃣️创建代理类和真实类,均实现接口,这是类实现的接口中完成用户请求,代理对象维护一个指向接口的真实对象,并调用其实现;

3⃣️用户直接向代理对象发请求;

下面以租房为例,用代码来实现。

首先,创建租房接口:

 /*
* 定义一个出租房屋接口
*/
public interface RentalHouseInterface {
public void rentalHouse();
}

然后创建代理类和真实类实现接口,真实类实现请求逻辑并在代理类中维护指向接口的真实类:

 /*
* 创建一个房东类,实现出租房屋接口,房屋的地址和接口都是由房东规定,所以房东才是真实对象
*/
public class Landlord implements RentalHouseInterface{
private String address;//房屋所处的位置
private int price;//出租房屋的价格 public Landlord(String address,int price) {
this.address = address;
this.price = price;
}
/**
* 房东给出

Java内功修炼系列一代理模式的更多相关文章

  1. Java内功修炼系列一工厂模式

    工厂模式是一种创建型模式,它提供了一种新的创建对象的方式,一般情况下我们都习惯用new关键字直接创建对象.有时候会遇到这种情况,我们需要根据具体的场景选择创建什么类型的对象,可能有多种类型都能选择,但 ...

  2. Java内功修炼系列一责任链模式

    在上一节的拦截器中提到,程序的设计者一般会用拦截器替替代动态代理,将动态代理的逻辑隐藏起来,而把拦截器接口提供给开发者,使开发者不需要关系动态代理的具体实现过程,但是有时候需要多个拦截器,而且拦截器之 ...

  3. Java内功修炼系列一观察者模式

    观察者模式又称发布-订阅模式,就是观察者通过订阅被观察者,或关注被观察者,从而实时更新观察者的信息.比如我们玩微博的时候,如果关注了一些博主,那么当博主发动态时,在首页微博列表中就会自动更新这些博主发 ...

  4. Java内功修炼系列一拦截器

    在动态代理中,我们知道在代理类中,执行真实对象的方法前后可以增加一些其他的逻辑,这些逻辑并不是真实对象能够实现的方法,比如一个租房的用户希望租一套公寓,但是中介所代理的这个房东并没有可以出租的公寓,那 ...

  5. Java内功修炼系列一反射

    “JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制 ...

  6. Java设计模式(10)代理模式(Proxy模式)

    理解并使用设计模式,能够培养我们良好的面向对象编程习惯,同时在实际应用中,可以如鱼得水,享受游刃有余的乐趣. Proxy是比较有用途的一种模式,而且变种较多,应用场合覆盖从小结构到整个系统的大结构,P ...

  7. 设计模式系列之代理模式(Proxy Pattern)——对象的间接访问

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

  8. 浅谈Java五大设计原则之代理模式

    我们来定义一下  AOP(面向切面编程) 它是面向对象的一种补充或者是一种增强,它在这基础上增加了一些 而外的功能增强. 它可以在原有的行为不改变的前提,在这之前或者之后完成一些而外 的事情. 而AO ...

  9. Java设计模式---(动态)代理模式

    代理设计模式 定义:为其他对象提供一种代理以控制对这个对象的访问. 动态代理使用 java动态代理机制以巧妙的方式实现了代理模式的设计理念. 之前虽然会用JDK的动态代理,但是有些问题却一直没有搞明白 ...

随机推荐

  1. VS中检测数据库链接

    在程序中链接数据库,总要为链接语句发愁.可以尝试在链接前,从VS中测试下链接,测试成功的话,可以直接将链接语句复制到程序中. 在VS中,选择“工具”——“连接到数据库”,如下:

  2. POJ-1502-MPI Maelstrom-dijkstra+输入处理

    BIT has recently taken delivery of their new supercomputer, a 32 processor Apollo Odyssey distribute ...

  3. 左神算法进阶班1_5BFPRT算法

    在无序数组中找到第k大的数1)分组,每N个数一组,(一般5个一组)2)每组分别进行排序,组间不排序3)将每个组的中位数拿出来,若偶数,则拿上 / 下中位数, 成立一个一个新数组.4)新数组递归调用BF ...

  4. golang 高效字符串拼接

    https://blog.csdn.net/u012210379/article/details/45110705 虽然方便,但是使用+=操作符并不是在一个循环中往字符串末尾追加字符串最有效的方式,一 ...

  5. css3 ---1 基本的选择器

    基本的选择器 <style type="text/css"> /*通配符选择器*/ * { margin: ; padding: ; border: none; } / ...

  6. 判断JS对象是否为空的几种方式

    .将json对象转化为json字符串,再判断该字符串是否为"{}" var data = {}; var b = (JSON.stringify(data) == "{} ...

  7. TestNG 入门教程【转】

    TestNG 入门教程[转] 国庆7天假期,大部分朋友都出去旅游了,微信圈里全是晒旅游的照片, 东南亚游,欧洲游呀,真是羡慕呀. 悲惨的我只去了上海野生动物园, 在家休息,利用这段假期,把之前学过的东 ...

  8. 威胁预警|首现新型RDPMiner挖矿蠕虫 受害主机易被添加恶意账户

    近日,阿里云安全发现一种新型挖矿蠕虫RDPMiner,通过爆破Windows Server 3389端口RDP服务的方式进行挖矿木马传播,致使用户CPU占用率暴涨,机器卡顿,更被创建名为Default ...

  9. 区间dp——cf1025D二叉搜索树的中序遍历好题!

    这题帮我复习了一下BST的中序遍历.. 因为给定的数组是递增的,那么BST的中序遍历一定是1 2 3 4 5 6 7 8 9 ... n 即[l,r]为左子树,那么根节点就是r+1,反之根节点就是l- ...

  10. 数论整除——cf1059D

    用map是卡着过去的..题解用vector+离散化后常数小了十倍.. 总之就是把所有模数给保存下来然后离散化,再去匹配一下即可,最后有个细节 自己的 #include<bits/stdc++.h ...