代理模式逼逼叨

spring框架中用到了哪些设计模式

代理模式:在AOP和remoting中被用的比较多

代理:委托人将自己的一部分权限委托给代理者,代理者就拥有被代理者(委托人)的部分权限,并且可以以被代理人的名义来实行这些权限,此时代理者与委托人等同,当然代理人也可以在实行权限时配合自己的能力来进行,当然不能超出这个权限。

两个类,代理类和委托类

  1. 创建一个公共接口,委托类要实现这个接口
  2. 再创建一个接口的实现类作为代理类,在这个类中的方法中可以直接调用委托类中的同名方法
  3. 外部类要进行访问时,可以使用接口指向代理类实例,调用代理类中的方法,从而间接调用委托类中的具体方法实现。

 

作用:

作用一:保护原有对象,让用户间接的访问它。

用户通过代理来访问原有的对象,而一般用户和原来的对象并不知道原来的对象“被代理了”。

一般用于在代理对象中对原有的对象进行管理和控制,而并不改变原有对象的功能!(因为对用户来讲并不知道原来的对象被代理了)

作用二:对不同的使用者(角色不同),提供不同的代理,来访问不同的功能。(如管理员和普通用户)

利用“代理者”,可以给不同的角色提供不同的服务。比如一个超市信息类,所有的信息都在其中。管理员通过“管理员代理”可以访问其中的敏感信息,比如进货价、销量、库存信息等。而普通用户通过“用户代理”只能访问一般的信息,比如货物的售价、货物的种类、品牌等。

以上作用,在Spring框架中,延伸出AOP(面向切面编程)的作用。不同的代理,可以理解为从不同角度来控制业务处理,把核心业务和过程化的非核心业务分离(如验证身份、是否登录等)。

作用三:延迟实例化(lazy instantiation)

用户可以直接访问代理器,而在访问具体功能的那一刻再根据需要来实例化原来的对象!

 

实现:

原有类和代理类必须都同时实现统一的接口,以便用户访问时能够通过统一的方式来访问功能(用户并不一定需要知道他访问的实际上是一个“代理器”)。

 

 

总接口:ZiRanRen

1 public interface ZiRanRen {
2     void Quanli();
3 }

委托人:MaYun

 1 public class MaYun implements ZiRanRen {
 2     public void eat() {
 3         System.out.println("今天吃满汉全席");
 4     }
 5     public void drink() {
 6         System.out.println("今天喝大西洋");
 7     }
 8     @Override
 9     public void Quanli() {
10         System.out.println("我赋予我的代理律师来行使这些权利,此时代理律师全权代理我处理某些事务");
11     }
12 }

 

代理律师:LvShi

 

1 public class LvShi implements ZiRanRen {
2     @Override
3     public void Quanli() {
4         new MaYun().Quanli();
5     }
6 }

 

测试类:Clienter

 

1 public class Clienter {
2     public static void main(String[] args) {
3         ZiRanRen ls = new LvShi();
4         ls.Quanli();
5     }
6 }

 

执行结果:

我赋予我的代理律师来行使这些权利,此时代理律师全权代理我处理某些事务

 

 

 

Cookie底层实现原理:WEB服务器通过在HTTP响应消息中增加Set-Cookie响应头字段将Cookie信息发送给浏览器,浏览器则通过在HTTP请求消息总增加Cookie请求头字段将Cookie回传给WEB服务器。

 

代理模式很简单,只要记住以下关键点,简单易实现:

    (1)代理类与委托类实现同一接口

    (2)在委托类中实现功能,在代理类的方法中中引用委托类的同名方法

    (3)外部类调用委托类某个方法时,直接以接口指向代理类的实例,这正是代理的意义所在:屏蔽。

 

对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理。

  • 静态代理:由程序员创建代理类或特定工具自动生成源代码再对其编译,也就是说在程序运行前代理类的.class文件就已经存在。编译时就已经将接口,被代理类,代理类等确定下来
  • 动态代理:动态代理类的字节码在程序运行时由Java反射机制动态生成,无需程序员手工编写它的源代码。

JDK自从1.3版本开始,就引入了动态代理,并且经常被用来动态地创建代理。JDK的动态代理用起来非常简单,但它有一个限制,就是使用动态代理的对象必须实现一个或多个接口。如果想代理没有实现接口的继承的类,该怎么办?现在我们可以使用CGLIB包

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值