天天看点

设计模式-代理模式

定义:由于某些原因需要给某对象提供一个代理以控制该对象的访问

结构:

抽象主题(Subject): 接口声明要实现的业务方法

真实主题 (Real Subject): 实现抽象主题里的业务方法

代理类(Proxy):提供了与真实主题相同的接口,它可以扩展、控制真实主题的功能。

代理模式的结构很简单,是通过继承抽象主题的代理类来包含真实主题,从而来实现对真实主题的访问。

设计模式-代理模式

代码示例:

测试代码:

以上就是代理模式的实现,也可以说是静态代理

静态代理的局限性:

如果我们需要再增加一个需要代理的方法,那我们需要修改上面3个类,每个类都要加对应的逻辑。

如果我们想再代理一个其他的对象,也需要对代理类进行修改。

那么如果用动态代理实现上面的代码会怎么样呢?

Ticket类和OfficialTicket不变

此时如果我们想增加一个退票方法,如果用动态代理,那么只需要改动Ticket类和OfficialTicket类。

Cglib实现:

返回目录

书山有路勤为径,学海无涯苦作舟