代理模式是设计模式中比较常见的模式之一。它可以在客户对象和实际需要访问的服务对象之间插入一个代理对象。
代理对象控制着对服务对象的访问,通过代理层可以实现额外的功能处理,比如访问控制、缓存等。代理模式有如下几个主要角色:
-
抽象主题(Subject)角色:声明了RealSubject和Proxy的共同接口,这样客户可以通过接口进行访问,而不必关心是访问的是RealSubject还是Proxy。
-
实际主题(RealSubject)角色:定义代理所表示的实际对象,它实现了抽象主题角色中定义的接口。
-
代理主题(Proxy)角色:提供了与实际主题相同的接口,其内部含有对实际主题的引用,它可以访问、控制或扩展实际主题的功能。
代理模式有以下几个优点:
-
代理对象可以取代实际对象,节省资源。比如网络资源消耗大的场景下,使用代理可以缓存数据,减少网络交互。
-
代理对象可以进行权限控制。可以根据访问者的权限,控制其对实际对象的访问。
-
代理对象可以进行额外的功能处理。比如日志记录,性能统计等。
-
实际对象可以隐藏在代理后。代理对象屏蔽了实际对象的细节,简化了外部与实际对象的交互。 但是,代理模式也有一定的缺点:1. 可能造成系统变得复杂。代理对象的引入会增加系统的分层,进行额外的封装与功能扩展。2. 可能影响性能。代理对象的引入无形中增加了系统的调用链,这可能会对性能造成一定影响。代理模式在实际开发中有着广泛的应用,比如Spring AOP、缓存等都是典型的代理模式应用场景。
总体来说,当需要控制对对象的访问,或需要在访问对象前后进行某些操作时,代理模式是一个非常实用的设计模式。它可以帮助我们更好的抽象业务逻辑,提高系统的可扩展性与健壮性。代理模式虽然会增加系统的复杂性,但是其带来的好处却是值得这一代价的。熟练使用这一设计模式,可以让我们的代码变得更加干净高效。所以,理解代理模式的原理与思想,并在实际工作中灵活运用,是每个程序员必备的技能之一
此文章为4月Day20学习笔记,内容来源于极客时间《左耳听风》 这门课真的非常好,推荐大家看看