1.1 代理模式的本质:代理模式其实就是通过中间端连接起客户端和服务端的对话,起到一个非桥梁的连接模式,实现客户端和服务端无沟通,实际就是起到中介的作用,这一整个的过程被称为代理模式。
1.2 为什么要用代理模式:举个例子,你想买一款美版的Iphone手机,但是如果你自己去买那你就需要办签证买机票,如果你口语不好还要找翻译,这整个的一个过程是很麻烦的。这个时候如果你找海外代购,那么就剩下了很多事,而且本身的你对这些产品可能不太了解,只知道大概,但是呢海外代购会给你详细解释,会帮你仔细挑选。这就是体现到了代理模式。或者说呢,有时候需要保证服务端对象的安全,是不允许客户端去直接访问服务端的,这个时候也是需要代理模式来处理的。
这样代码模式的优点就体现出来了:1.2.1 降低客户端与服务端的耦合性,减少客户端的操作复杂度
1.2.2 扩展目标对象的功能
1.2.3 能保护目标对象
同样的缺点也很明显 :1.2.4 增加系统复杂度
1.2.5 因为客户端与服务端中间插入了中介,会降低服务处理效率
1.3 代理模式的必要模块
1.3.1 真实对象 真实引用的对象
1.3.2 抽象对象 通过接口或抽象类声明真实主题和代理对象实现的业务方法。这个接口或者对象对真实对象和代理对象都有规范作用。
1.3.3 代理对象 提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能。
1.3.4 客户端
图片如下:
代码实现:
package Daili; public class DailiTest { public static void main(String[] args) { Daili daili = new Daili(); daili.test(); } } //真实对象 class RealObj implements Subject { public void test() { System.out.println("我是真实对象"); } } //抽象对象 interface Obj { void test(); } //代理 class Daili implements Subject { private RealObj realObj; public void test() { if (realObj == null) { realObj = new RealObj (); } beforeTest(); realObj.test(); afterTest(); } public void beforeTest() { System.out.println("访问真实对象之前。"); } public void afterTest() { System.out.println("访问真实对象之后。"); } }
原文:https://www.cnblogs.com/mokpiet/p/13724914.html