| 1) 代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。 |
| 2) 被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象 |
| 3) 代理模式有不同的形式, 主要有三种 静态代理、动态代理 (JDK代理、接口代理)和 Cglib代理 (可以在内存动态的创建对象,而不需要实现接口, 他是属于动态代理的范畴) |

| 静态代理在使用时,需要定义接口或者父类,被代理对象(即目标对象)与代理对象一起实现相同的接口或者是继承相同父类 |
| 1) 定义一个接口:ITeacherDao |
| 2) 目标对象TeacherDAO实现接口ITeacherDAO |
| 3) 使用静态代理方式,就需要在代理对象TeacherDAOProxy中也实现ITeacherDAO |
| 4) 调用的时候通过调用代理对象的方法来调用目标对象. |
| 5) 特别提醒:代理对象与目标对象要实现相同的接口,然后通过调用相同的方法来调用目标对象的方法 |

| package com.atguigu.proxy.staticproxy; |
| |
| public interface ITeacherDao { |
| void teach(); |
| } |
| |
| package com.atguigu.proxy.staticproxy; |
| public class TeacherDao implements ITeacherDao { |
| @Override |
| public void teach() { |
| |
| System.out.println(" 老师授课中 。。。。。"); |
| } |
| } |
| |
| package com.atguigu.proxy.staticproxy; |
| |
| public class TeacherDaoProxy implements ITeacherDao{ |
| |
| private ITeacherDao target; |
| |
| |
| public TeacherDaoProxy(ITeacherDao target) { |
| this.target = target; |
| } |
| |
| @Override |
| public void teach() { |
| |
| System.out.println("开始代理 完成某些操作。。。。。 "); |
| target.teach(); |
| System.out.println("提交。。。。。"); |
| } |
| |
| } |
| |
| package com.atguigu.proxy.staticproxy; |
| public class Client { |
| |
| public static void main(String[] args) { |
| |
| TeacherDao teacherDao = new TeacherDao(); |
| |
| TeacherDaoProxy teacherDaoProxy = new TeacherDaoProxy(teacherDao); |
| |
| |
| teacherDaoProxy.teach(); |
| } |
| |
| } |
| 1) 优点:在不修改目标对象的功能前提下, 能通过代理对象对目标功能扩展 |
| 2) 缺点:因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类 |
| 3) 一旦接口增加方法,目标对象与代理对象都要维护 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
2021-08-31 vue开发:前端项目模板