Bootstrap

设计模式——代理模式

目录

概念

见名知意

UML释义

代理模式应用

1. 远程代理

2. 虚拟代理

3. 安全代理

4. 智能指引

案例代码

创建权限接口

创建继承类

创建代理类

客户端类

结束语


概念

        代理模式: 为其他对象提供一种代理以控制对这个对象的访问。

见名知意

1. 就类似于马云 , 想要购买一份飞机票 ,而这种事完全可以交给代理——秘书去做。

2. 小学的时候 , 有男同学想送给暗恋的女生一朵花,但不好意思,于是交给自己同桌,让其代为自己送给女生那朵花。 这也是代理模式的体现。

UML释义

 

  • Subject
    抽象主题角色:可以是抽象类,也可以是接口。抽象主题是一个普通的业务类型,无特殊要求。
  • RealSubject
    具体主题角色:也叫做被委托角色被代理角色,是业务逻辑的具体执行者。
  • Proxy
    代理主题角色:也叫做委托类代理类。它负责对真实角色的应用,把所有抽象主题类定义的方法限制委托给真实主题角色实现,并且在具体主题角色处理完毕前后做预处理和善后处理工作

代理模式应用

1. 远程代理

        为一个对象在不同地址空间提供局部代表。这个可以隐藏一个对象存在于不同地址空间的事实。 eg:nginx

2. 虚拟代理

        根据需要创建开销很大的对象。

        eg:打开一个网站时 , 我们看到的图片可能全是一摸一样的 , 而点开之后,才开始下载。类似于前端开发中常用的懒加载。

3. 安全代理

        用来控制真是对象访问时的权限。

        eg :一个后台管理系统中的管理员权限分配。

4. 智能指引

        指当调用真实的对象时,代理处理另外一些事。

案例代码

还是以马云买票这件事来说

创建权限接口

public interface Agent {
    void quanli();
    void run();
}

创建继承类

public class MaYun implements Agent{
    @Override
    public void quanli() {
        System.out.println("行使马云的权力");
    }

    @Override
    public void run() {
        System.out.println("runing");
    }
}

创建代理类

public class Proxy implements Agent{
    Agent agent = null;
//    @Override
    public Proxy(Agent agent) {
        this.agent = agent;
    }
    @Override
    public void quanli() {
        agent.quanli();
    }

    @Override
    public void run() {
        agent.run();
    }
}

结合工厂模式 可以与代理模式相结合

客户端类

public class client {
    public static void main(String[] args) {
        MaYun maYun = new MaYun();
        Proxy proxy = new Proxy(maYun);
        proxy.run();
        proxy.quanli();
    }
}

结束语

代理模式在生活和项目中用的频率算是其他设计模式出现率较高的 , 其面试命中率至少也能排进前五 , 想要通过学习设计模式参加秋招或者春招的同学,可以好好研习一下此模式 。

社招的大佬勿扰。。。

;