设计模式:4.代理模式

代理模式

代理模式属于结构型模式

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

代理模式就是在操作原对象的时候,多出来一个代理类,用来对原对象的访问进行控制和替代原对象进行一些操作
模式类图
在这里插入图片描述
角色

  1. 抽象接口:able,定义业务接口
  2. 被代理类:Source
  3. 代理类:Proxy,用来对原对象的访问进行控制和替代原对象进行一些操作
  4. 客户端:Client,负责调用代理类

优点

  1. 职责清晰,被代理类只关心实际的业务逻辑,不关心其他事情
  2. 高扩展性,被代理类可以随意更改,不会影响到代理类对其的访问控制

抽象接口
被代理类和代理类都实现此接口

/**
 * @author: linan
 * @date: 2020/5/25 10:20
 * @description: 手机接口
 */
public interface Phoneable {

    /**
     * 打电话
     */
    void call();
}

被代理类
实现Phoneable接口

/**
 * @author: linan
 * @date: 2020/5/25 10:19
 * @description: 被代理类
 */
public class Phone implements Phoneable {

    @Override
    public void call() {
        System.out.println("打电话");
    }
}

代理类
实现Phoneable接口,持有被代理类实例,提供validate()对被代理类的访问进行控制

/**
 * @author: linan
 * @date: 2020/5/25 10:19
 * @description: 被代理类
 */
public class Proxy implements Phoneable {

    private Phone phone = new Phone();

    @Override
    public void call() {
        if(validate()){
            phone.call();
        }
        System.out.println("结束通话");
    }

    /**
     * 检查手机号
     * @return
     */
    private Boolean validate(){
        System.out.println("手机号验证通过");
        return Boolean.TRUE;
    }
}

验证

public static void main(String[] args) {
    Proxy proxy = new Proxy();
    proxy.call();
}

输出

手机号验证通过
打电话
结束通话

代理模式与装饰器模式的区别,代理模式主要是对原对象的访问进行控制,而装饰器模式主要是为了对原对象增加新的功能

参考:设计模式之禅:https://www.kancloud.cn/sstd521/design/193540

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章