第十四章 静态代理设计模式
1.为什么需要代理设计模式#
1.1 问题#
-
在javaEE分层开发中,那个层对我们最重要?
DAO-->Service-->Controller 在javaEE分层开发中,最为重要的是Service层
-
Service层中包含哪些代码?
Service层 = 核心功能(几十行 上百行代码) + 额为功能(附加功能) 1. 核心功能 业务运算 DAO调用 2. 额外功能 1. 不属于业务 2. 可有可无 3. 代码量小 事务 日志 性能
-
额外功能写在Service层好不好?
Service调用者(Controller): 需要Service书写额外功能 软件设计者: 不需要Service书写额外功能
-
现实生活中的解决方法
房东现在不想有广告 看房的业务了, 太累了, 成本太高, 想只保留签合同 收钱的业务
但是, 如果没有广告 看房业务, 房客就不知道房东有房出租,该怎么解决呢?
房东可以找一个中介,将广告 看房的业务交给中介,自己躺着收钱就好
如果对该中介不满意,还可以换一个中介,而签合同 收钱的业务没有变化
注意: 房东提供的方法与中介提供的方法必须一致
2.代理设计模式#
2.1 概念#
通过代理类,为原始类增加额外功能
好处: 有利于原始类的维护
2.2 名词解释#
1. 原始类(目标类)
业务类(核心功能-->业务运算\DAO调用)
2. 原始方法(目标方法)
原始类中的方法
3. 额外功能(附加功能)
日志\事务\性能
2.3 代理开发的核心要素#
代理类 = 目标类 + 额外功能 + 与目标类实现相同的接口(方法一致)
2.4 编码#
静态: 有一个原始类就要有一个代理类
//实现与目标类相同的接口
public class UserServiceProxy implements UserService{
private UserServiceImpl userService = new UserServiceImpl();
@Override
public void register(User user) {
//代理内容
System.out.println("-----代理功能register-----");
//目标类内容
userService.register(user);
}
@Override
public boolean login(String username, String password) {
System.out.println("----代理功能login-----");
return userService.login("username","password");
}
}
2.5 静态代理存在的问题#
1. 静态类文件过多,不利于项目管理
2. 维护性差
当给多个原始类添加相同的相同的额外功能的时候,如果额外功能有变化,就需要更改所有的代理类
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现