Spring5 静态代理模式

本文介绍了代理模式的基本概念,包括静态代理和动态代理,并通过租房的例子详细阐述了静态代理的实现步骤。代理模式使得真实角色的操作更专注,公共业务由代理角色处理,便于扩展和管理。然而,它可能导致代码量增加,开发效率降低。同时,文章通过代码示例展示了代理模式如何简化复杂业务逻辑,以T1和T1_1的类结构为实例进行了解释。
摘要由CSDN通过智能技术生成

代理模式

为什么到学习代理模式?因为这就是SpringAOP的底层!【SpringAOP和SpringMVC】

  • 代理模式的分类:

1.静态代理

2.动态代理

在这里插入图片描述

  • 静态代理

角色分析:

  • 抽象角色:一般会使用接口或者抽象类来解决
  • 真实角色:被代理的角色
  • 代理角色:代理真实角色,代理真实角色后,我们一般会做一些附属操作
  • 客户:访问代理对象的人!

代码步骤

  • 接口
package com.cloud.demo;

//租房
public interface Rent {

    void rent();
}

  • 真实角色
package com.cloud.demo;

//房东
public class Host implements Rent {
    public void rent() {
        System.out.println("要出租房子");
    }
}

  • 代理角色
package com.cloud.demo;


public class Proxy implements Rent {

    private Host host;
    public Proxy(){}

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

    public void rent() {
        host.rent();
        seeHouse();
        fare();
    }

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

    public void fare(){
        System.out.println("填写合同");
    }
}

  • 客户端访问代理角色
package com.cloud.demo;

public class Client {
    public static void main(String[] args) {
        //房东要租房子
        Host host = new Host();
        //代理,中介帮房东租房子,但是呢!代理一般会有点其它操作
        Proxy proxy = new Proxy(host);

        //你直接面向中介租房子
        proxy.rent();
    }
}

代理模式的好处:

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

缺点:

  • 一个真实角色就会产生一个代理角色;代码量就会翻倍,开发效率就会变低
加深理解

在这里插入图片描述
给大家用我的话解释一遍你编写了一个接口里面写了一些方法,然后你又编写了了一个类去实现了接口里面的方法然后用户就开始使用你的新功能了,但是如果说你类里面代码量较多呢改起来会很忙烦也可能会报错所以呢我们呢就采用代理的方式来解决这个问题用户面向的不在是业务层而是代理层,而代理呢就相当于一个连接口吧

  • T1
package com.cloud.demo01;

public class T1 implements T2 {
    public void getT2() {
        System.out.println("欢迎光临");
    }

    public void getT3() {
        System.out.println("谢谢惠顾");
    }
}

  • T1_1
package com.cloud.demo01;

public class T1_1 implements T2 {
    private T1 t1;

    public void setT1(T1 t1) {
        this.t1 = t1;
    }

    public void getT2() {
        T4("getT2");
        t1.getT2();
    }

    public void getT3() {
        t1.getT3();
    }

    public void T4(String msg){
        System.out.println("老班营业额"+msg);
    }
}

  • T2
package com.cloud.demo01;

public interface T2 {
     void getT2();
     void getT3();
}

  • T3
package com.cloud.demo01;

public class T3 {
    public static void main(String[] args) {
        T1 t1 = new T1();

        T1_1 t1_1 = new T1_1();
        t1_1.setT1(t1);

        t1_1.getT2();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值