静态代理模式 AOP

本文介绍了代理模式的原理和应用场景,通过一个静态代理的例子解释了如何在不修改原有代码的基础上扩展功能,遵循了设计模式的开闭原则。文章还提及了静态代理的局限性,并引入了动态代理作为解决方案,以减少代码冗余。
摘要由CSDN通过智能技术生成

为什么要学代理模式?因为这就是SpringAop的底层 【SpringAop 和 SpringMVC面试必问 ???还未学】
代理模式的分类:

  • 静态代理
    • 当有新的需求时,尽量不改变底层代码,为要改变的类增加一个代理类,它实现要改变的类的所有功能并在它的基础上增加新的功能,通过组合或者继承实现。

静态代理例子:
Rent接口

public interface Rent {
     void rent();
}

Host房东实现Rent接口

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

房东(Host)只有一个功能,就是租房子。其他的事情房东一律不管,比如说找租客,邀请租客看房子等任务都交个中介(代理)来完成。 这使得房东的功能更加的纯粹、单一。 想要拓展功能则直接在Proxy类中增加即可。

	public class Proxy {
    private Host host;

    public Proxy(Host host){
        this.host = host;
    }
	
    public void rent(){
        System.out.println("中介卖房子啦");
        host.rent();
    }

    public void visit(){
        System.out.println("参观房子");
    }
}

Main

public class MyTest {
    public static void main(String[] args) {
        Proxy proxy = new Proxy(new Host());
        proxy.visit();
        proxy.rent();
    }
}

讲完静态代理再来提一下设计模式的开-闭原则
开-闭”原则,即“对扩展开放,对修改关闭”。继续拿租房子的例子来说。当我们需要增加Proxy的功能时候,比如说要使得rent()方法中增加一句代码:

public void rent(){
        System.out.println("中介卖房子啦");
        host.rent();
        System.out.println("租房成功,获得提成");
    }

所谓修改关闭就是指不要修改Proxy类中的任何代码,想要增加功能就自己扩展一个类来实现这个功能。
Rent_Proxy2

public class Rent_Proxy2 {
	public Proxy proxy;
	public Rent_Proxy2 (Proxy proxy){
        this.proxy = this.proxy;   //获得proxy对象
    }

	public void rent(){
		proxy.rent();
		System.out.println("租房成功,获得提成");
   }

    public void visit(){
        proxy.visit();
    }
}

开闭原则虽然导致代码量大大增加,但是如果随意修改底层的代码是一个很危险的事情,可能造成其他业务崩溃。开闭原则降低了系统的耦合性。

通过静态代理模式会大大增加代码量,而通过动态代理模式(反射)则可以避免这个问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的代理模式是一种常见的设计模式,用于实现面向切面编程(AOP)。AOP允许在程序的不同部分插入额外的逻辑,而不需要修改原有代码。代理模式AOP的一种实现方式。 在代理模式中,我们定义了一个公共接口,并有一个实际的对象实现该接口。然后,我们创建一个代理类,该类也实现了相同的接口,并持有对实际对象的引用。通过代理类,我们可以在方法调用之前或之后插入额外的逻辑。 在Java中,代理模式可以通过两种方式实现:静态代理和动态代理。 静态代理是通过手动编写代理类来实现的。我们需要为每个需要代理的类编写一个对应的代理类,这些代理类在编译时已经确定。静态代理简单易懂,但是如果有多个类需要代理,会导致代理类的数量增加。 动态代理是在运行时动态生成代理类的方式。Java提供了`java.lang.reflect`包来支持动态代理。动态代理使用`Proxy`类和`InvocationHandler`接口来创建代理类。`Proxy`类提供了创建动态代理类对象的静态方法,而`InvocationHandler`接口则定义了需要在代理类中实现的方法。 使用动态代理,我们可以在运行时创建代理对象,并在方法调用前后执行相应的处理逻辑。这种方式更加灵活,可以减少编写重复代码的工作量。 总结来说,代理模式是一种常见的设计模式,用于实现AOP编程。在Java中,可以通过静态代理或动态代理来实现代理模式静态代理需要手动编写代理类,而动态代理则是在运行时动态生成代理类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值