Loading

第十四章 静态代理设计模式

1.为什么需要代理设计模式

1.1 问题

  • 在javaEE分层开发中,那个层对我们最重要?

    DAO-->Service-->Controller
    
    在javaEE分层开发中,最为重要的是Service层
    
  • Service层中包含哪些代码?

    Service层 = 核心功能(几十行 上百行代码) + 额为功能(附加功能)
    1. 核心功能
    	业务运算
    	DAO调用
    2. 额外功能
    	1. 不属于业务
    	2. 可有可无
    	3. 代码量小
    	
    	事务 日志 性能
    
  • 额外功能写在Service层好不好?

    Service调用者(Controller): 需要Service书写额外功能
    软件设计者: 不需要Service书写额外功能
    
  • 现实生活中的解决方法

image

房东现在不想有广告 看房的业务了, 太累了, 成本太高, 想只保留签合同 收钱的业务
但是, 如果没有广告 看房业务, 房客就不知道房东有房出租,该怎么解决呢?
房东可以找一个中介,将广告 看房的业务交给中介,自己躺着收钱就好
如果对该中介不满意,还可以换一个中介,而签合同 收钱的业务没有变化

注意: 房东提供的方法与中介提供的方法必须一致

image

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. 维护性差
   当给多个原始类添加相同的相同的额外功能的时候,如果额外功能有变化,就需要更改所有的代理类
posted @ 2022-07-21 16:55  苏无及  阅读(20)  评论(0编辑  收藏  举报