面试总结-设计模式

动态代理和静态代理的区别

动态代理和静态代理都是设计模式中的代理模式的不同实现方式,它们在代理对象的创建和管理上有一些关键区别。

### 静态代理:

1. **代理类的编译时确定:** 在静态代理中,代理类在编译时就已经确定。也就是说,代理类的源代码需要在编译时就存在,通过手动编写或生成代理类的代码,然后编译得到代理类的字节码。

2. **代理对象数量有限:** 对于每个需要代理的类,都需要手动创建一个代理类。如果系统中有多个类需要代理,就需要为每个类创建一个对应的代理类,导致代理类的数量较多。

3. **代码维护较为繁琐:** 静态代理的实现需要手动编写代理类,当被代理的接口或方法发生变化时,代理类也需要相应地修改,这增加了代码维护的难度。

### 动态代理:

1. **代理类在运行时动态生成:** 动态代理是在程序运行时通过反射等机制动态生成的代理类。代理类的创建不需要在编译时确定,而是在运行时根据需要动态生成。

2. **通用性更强:** 动态代理可以代理多个类或接口,不需要为每个类都手动创建一个代理类。这使得动态代理更加灵活和通用,适用于代理多个类的情况。

3. **代码维护相对简单:** 由于动态代理是在运行时生成的,因此可以更容易地适应变化。如果被代理的接口或方法发生变化,不需要修改代理类的代码,只需要在运行时传递正确的接口和处理逻辑。

### 共同点:

- 都需要一个接口(或抽象类)来定义被代理对象和代理对象的行为。

在Java中,动态代理主要使用`java.lang.reflect`包中的`Proxy`类和`InvocationHandler`接口来实现。而静态代理则是通过手动编写代理类。

总的来说,动态代理相对于静态代理更加灵活和通用,减少了手动编写代理类的工作,但其在运行时生成代理类的过程会带来一些性能开销。选择使用哪种代理方式通常取决于具体的需求和情境。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值