持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情
上一篇文章我们介绍了代理模式的相关概念,这篇文章我们来介绍一下代理模式的实现步骤以及优缺点,让读者对代理模式有一个更透彻的了解。
实现方式
首先我们看看它的实现步骤。
- 创建接口。如果没有现成的接口,我们就需要创建一个接口来实现代理和服务对象的可交换性。这个接口其实就相当于上一篇文章说的“抽象角色”;而服务对象就是上篇文章的“具体角色”。然而从某些业务服务类中抽取接口并非总是可行的,因为这样我们需要对服务的所有客户端进行修改,让它们使用接口而不是原有的类。针对这种情况我们可以将代理作为这些业务服务类的子类,这样代理就能继承服务的所有接口了。
- 创建代理类。代理类中必须包含一个存储指向具体角色的引用的成员变量。通常情况下,代理负责创建真实对象并对其整个生命周期进行管理。在一些特殊情况下,客户端会通过构造函数将真实对象传递给代理类。
- 根据需求实现代理方法。在我们工作中的大部分情况下,代理在完成一些任务后应将工作委派给服务对象。这个调用方式就是在代理方法中新增一些附加逻辑,然后再调用真实对象的接口来获取其提供的服务。
优缺点分析
各个设计模式的存在都是有原因的,可以解决一些问题,同时有势必会引入一些“麻烦”。我们接下来分析一下代理模式的优缺点。
代理模式的优点如下:
- 代理模式遵循设计模式的原则,代理模式的职责十分清晰。
- 代理模式可以“高扩展”,也就是说,只要某个类实现了接口,那么都可以用代理。
- 代理模式可以通过动态代理实现“智能化”。(针对这种情况读者有兴趣可以自行查阅)
代理模式的缺点也比较明显,其主要缺点是:
- 显而易见,代理模式在系统设计的时候会增加类的数量。
- 同时,如果在客户端和目标对象之间增加一个代理对象,势必会造成请求处理的速度变慢。
- 使用代理模式,会增加一些非业务代码,这样肯定会增加系统的复杂度。
总结
对比上一篇文章的概念介绍和这篇文章的实现步骤、优缺点介绍,我们一定会对代理模式有更深刻的理解了。接下来我们寻找一个具体的场景来应用代理模式,以便使读者可以更直观地理解代理模式。