1.代理模式

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("访问真实对象之后。");
    }
}

 

posted @ 2020-09-24 16:48  mokpiet  阅读(185)  评论(0编辑  收藏  举报