美文网首页
10 代理模式

10 代理模式

作者: Messix_1102 | 来源:发表于2023-04-14 14:34 被阅读0次

为什么要学习代理模式?因为这是Spring AOP的底层!
代理模式的分类:

  • 静态代理
  • 动态代理


    代理模式

10.1静态代理

角色分析:

  • 抽象角色:一般会使用接口或抽象类来解决
  • 真实角色:被代理的角色
  • 代理角色:代理真实角色,代理真实角色后,我们一般会 做一些附属操作
  • 客户:访问代理对象
    代码步骤
  1. 接口
//租房
public interface Rent {
    public void rent();
}
  1. 真实角色
// 房东
public class Host implements Rent{
    public void rent(){
        System.out.println("房东要出租房子");
    }
}
  1. 代理角色
package com.hunter.demo01;

public class Proxy implements Rent{
    private Host host;

    public Proxy(){
    }

    public Proxy(Host host) {
        this.host = host;
    }

    public void rent(){
        seeHouse();
        fee();
        aggrement();
        host.rent();
    }

    public void seeHouse(){
        System.out.println("中介带你看房");
    }

    public void fee(){
        System.out.println("收中介费");
    }

    public void aggrement(){
        System.out.println("签合同");
    }
}
  1. 客户端访问代理角色
package com.hunter.demo01;

public class Client {
    public static void main(String[] args) {
        // 房东租房子
        Host host = new Host();
        // 代理,中介帮房东租房子,有一些附属操作
        Proxy proxy = new Proxy(host);
        // 你不用面对房东,直接租房
        proxy.rent();
    }
}

代理模式的好处:

  • 可以使真实角色的操作更加纯粹,不用去关注公共业务
  • 公共业务交给代理角色,实现了业务的分工
  • 公共业务发生扩展时,方便集中管理

缺点:

  • 一个真实角色就会产生一个代理角色,代码量翻倍

10.2 加深理解

AOP 思想

代理接口

package com.hunter.demo02;

public interface UserService {
    public void add();
    public void update();
    public void delete();
    public void query();
}

被代理类

package com.hunter.demo02;

public class UserServiceImpl implements UserService{
    @Override
    public void add() {
        System.out.println("增加了一个用户");
    }

    @Override
    public void update() {
        System.out.println("修改了一个用户");
    }

    @Override
    public void delete() {
        System.out.println("删除了一个用户");
    }

    @Override
    public void query() {
        System.out.println("查询了一个用户");
    }
}

代理角色

package com.hunter.demo02;

public class UserServiceProxy implements UserService{
    UserServiceImpl userService;
    public UserServiceProxy(UserServiceImpl userService){
        this.userService = userService;
    }

    @Override
    public void add() {
        log("add");
        userService.add();
    }

    @Override
    public void update() {
        log("update");
        userService.update();
    }

    @Override
    public void delete() {
        log("delete");
        userService.delete();
    }

    @Override
    public void query() {
        log("query");
        userService.query();
    }

    // 日志方法
    public void log(String msg){
        System.out.println("【debug】使用了" + msg+  "方法");
    }
}

客户端

package com.hunter.demo02;

public class Client {
    public static void main(String[] args) {
        UserServiceImpl userService = new UserServiceImpl();
        UserServiceProxy proxy = new UserServiceProxy(userService);
        proxy.add();
    }
}

10.3 动态代理

  • 动态代理和静态代理角色一样
  • 动态代理类是动态生成的,不是我们直接写的
  • 动态代理也分为两大类:基于接口的动态代理,基于类的动态代理
    1. 基于接口:JDK 的动态代理
    2. 基于类:cglib
    3. java 字节码:Javassist

需要理解两个类:Proxy(代理),InvocationHandler(调用处理程序)
动态代理的好处:

  • 可以使真实角色的操作更加纯粹,不用去关注公共业务
  • 公共业务交给代理角色,实现了业务的分工
  • 公共业务发生扩展时,方便集中管理
  • 一个动态代理类代理的是一个接口,一般是对应的一类业务
  • 一个动态代理类可以代理多个了

相关文章

  • 设计模式之代理模式

    设计模式之代理模式 10分钟看懂动态代理设计模式(升级篇)-对这篇动态代理模式的思路整理 仿JDK实现动态代理逻辑...

  • spring框架 AOP

    10、 代理模式 为什么要学习代理模式?因为这就是SpringAOP的底层!【SpringAOP 和 Spring...

  • Java 动态代理

    2015-03-30 10:00 代理模式 代理模式是一种常见的设计模式,为其他对象提供一种代理以控制对这个对象的...

  • 设计模式

    单例模式 模板方法模式 工厂模式 代理模式 静态代理 JDK动态代理

  • 设计模式

    单例模式 代理模式 静态代理 jdk动态代理 cglib动态代理 工厂模式 适配器模式 建造者模式 观察者模式

  • kube-proxy的3种模式

    userspace代理模式 iptables代理模式 IPVS代理模式 https://kubernetes.io...

  • 第4章 结构型模式-代理模式

    一、代理模式简介 二、代理模式3个角色 三、代理模式的优点 四、代理模式的实例(游戏代练)

  • 理解代理模式

    原创博客地址 简介 代理模式,也叫做委托模式,分为:静态代理动态代理 代理模式也是平时比较常用的设计模式之一,代理...

  • 结构型 代理模式(文末有项目连接)

    1:什么是代理模式 2:没用代理模式时的实例 3:使用代理模式将其解耦(静态代理) 3:使用代理模式将其解耦(动态...

  • 设计模式-动态代理模式

    之前介绍了代理模式,大家也都了解了代理模式,不过之前介绍的代理模式是静态代理,静态代理什么意思?静态代理指的是代理...

网友评论

      本文标题:10 代理模式

      本文链接:https://www.haomeiwen.com/subject/rpktcrtx.html