侧边栏壁纸
  • 累计撰写 101 篇文章
  • 累计创建 89 个标签
  • 累计收到 9 条评论

spring系列笔记 - 第⼗四章 静态代理设计模式

bearjun
2021-07-06 / 0 评论 / 0 点赞 / 1,129 阅读 / 1,624 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2021-07-06,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

为什么需要代理设计模式

1、在JavaEE分层开发开发中,哪个层次对于我们来讲最重要?
Service层,因为里面封装了我们想要实现的业务,用于满足用户需求

2、Service层中包含了哪些代码?
Service层中 = 核心功能(几十行 上百行代码)+ 额外功能(附加功能)
1.核心功能(代码量较多):业务运算,DAO调用
2.额外功能(附加功能,不属于业务,可有可无,代码量小):事务、日志、性能 …

3、额外功能书写在Service层中好不好?
1.Service层的调用者的角度(Controller):需要在Service层书写额外功能。
2.软件设计者:Service层不需要额外功能。

4、现实生活中解决方式
引入中介或者是代理的方式。
55972-w1bqjmpfnz.png

代理设计模式

概念

代理设计模式概念: 通过代理类,为原始类(目标)增加额外的功能
好处:利于原始类(目标)的维护

名词解释

目标类 / 原始类:指的是 业务类 (核心功能 --> 业务运算、DAO调用)
目标方法 / 原始方法:目标类(原始类)中的方法就是目标方法(原始方法)
额外功能 / 附加功能:日志、事务、性能 …

代理开发的核心要素

代理类 = 目标类(原始类) + 额外功能 + 原始类(目标类)实现相同的接口

房东 --- 目标类
public interface UserService {
	m1
	m2
}
public UserServiceImpl implements UserServiceImpl {
	m1 ---> 业务运算、调用DAO
	m2 
}
----------------------------------------------------
中介 --- 代理类:要实现目标类相同的接口
public UserServiceProxy implements UserService {
	m1
	m2
}
静态代理编码

每一个原始类都会手工编写一个代理类(.java .class)

public class User {
  private String name;
  private String password;
}
public interface UserService {
    void register(User user);
    boolean login(String name, String password);
}
public class UserServiceImpl implements UserService {
    @Override
    public void register(User user) {
        System.out.println("UserServiceImpl.register 业务运算 + DAO");
    }

    @Override
    public boolean login(String name, String password) {
        System.out.println("UserServiceImpl.login 业务运算 + DAO");
        return true;
    }
}
/**
 * 静态代理类编码实现
 */
public class UserServiceProxy implements UserService { // 实现原始类相同的接口
    private UserService userService = new UserServiceImpl(); // 代理类中必须有原始类
    @Override
    public void register(User user) {
        System.out.println("---log---"); // 额外功能
        userService.register(user);
    }
    @Override
    public boolean login(String name, String password) {
        System.out.println("---log---"); // 额外功能
        return userService.login(name, password);
    }
}
静态代理存在的问题
  • 静态类文件数目过多,不利于项目管理
  • 代码可维护性差
0

评论区