代理模式是指给目标对象创建一个和它提供一样接口的中间层,我们可以在这个中间层对请求进行预处理或者善后处理,这个中间层就叫做代理
,代理模式和对象适配器模式的结构有些相似,但是它们的作用不同。
当我们需要对目标对象的调用进行额外处理时,比如说以下场景。
还是以之前的搜索引擎SearchEngine为例,我们为现有的SearchEngine做一个缓存代理,如果有缓存则返回缓存,没有则执行搜索操作,并将结果缓存起来。
现有的ISearchEngine提供一个搜索方法,用于根据关键字搜索并返回结果,定义如下。
代理类也实现了ISearchEngine,并且内部持有一个实现搜索功能的ISearchEngine实例。
在代理模式中,代理和被代理的对象实现了同样的接口,代理对象持有被代理对象的引用。代理模式可以让我们在不修改代码的情况下,对原有的类进行扩展,做一些前置和后置的工作。