静态代理模式【结构型】

代理模式是一种结构型设计模式,它允许通过使用代理对象来控制对另一个对象的访问。

代理对象通常会拦截对被代理对象的访问,并在其间插入额外的逻辑功能或控制。

举例: 假设你有一个喜欢的女孩,你想要告诉她你对他的爱,但是呢?你是个怂货,不敢直接说,所以你就想通过女孩的闺蜜转达。

在这个过程中就是代理模式的应用 代理模式由以下组成:

  1. 抽象角色(Subject):定义一个接口,该接口是代理对象和被代理对象的共同接口,以便代理对象能够替代被代理对象实现客户端的请求。

    在上面的案例中,抽象角色就是:你的爱,想说出来

  2. 真实角色(Real Subject):实现抽象角色定义的接口,并承担实际处理客户端请求的任务。

    在上面的案例中:真实角色就是:你【想表白的人(怂货)】

  3. 代理角色(Proxy):实现抽象角色定义的接口,并保存一个真实角色的引用。代理对象接受客户端的请求,然后转发请求给真实角色。

    在上面的案例中:代理角色就是,女孩的闺蜜

代码实现:

1、抽象角色【我对女孩的爱】

public interface MyLove {
​
    void say();
}

2、真实角色【表白的人】

/**
 * 真实对象
 **/
public class MySelf implements MyLove{
​
    private String context;
​
    public MySelf() {
    }
​
    public MySelf(String context) {
        this.context = context;
    }
​
    @Override
    public void say() {
        System.out.println("我想说:" + this.context);
    }
​
    public String getContext() {
        return context;
    }
​
    public void setContext(String context) {
        this.context = context;
    }
}

3、创建代理角色

/**
 * 女孩的闺蜜,作为代理角色
 * 想要让闺蜜表达对女孩的爱,就需要让闺蜜去表达,就是要实现 MyLove 向女孩说出来
 * 想要让女孩说出我想说的话,就需要将我自己聚合到闺蜜中,闺蜜才知道我想表达什么
 **/
public class GrilFriend implements MyLove {
​
    private final MySelf my;
​
    public GrilFriend(MySelf my) {
        this.my = my;
    }
​
    /**
     * 闺蜜想女孩表达男孩说的话
     **/
    @Override
    public void say() {
        System.out.println("闺蜜说:亲爱的,有个怂货喜欢你,但是他不敢告诉你,让我来告诉你。");
        System.out.println("闺蜜说:那个人想说");
        //闺蜜转达男孩的话
        this.my.say();
        System.out.println("闺蜜说:你觉得怎么样");
    }
}

4、现在就可以测试了

public static void main(String[] args) {
    //声明真实角色,想表白的人
    MySelf my = new MySelf();
    //想表白的人想说什么
    my.setContext("亲爱的girl,从我第一眼看见你,我就...,就...,我怂了。。。");
    //创建代理对象
    GrilFriend grilFriend = new GrilFriend(my);
    //代理对象帮忙转达
    grilFriend.say();
}
​
//测试结果
闺蜜说:亲爱的,有个怂货喜欢你,但是他不敢告诉你,让我来告诉你。
闺蜜说:那个人想说
我想说:亲爱的girl,从我第一眼看见你,我就...,就...,我怂了。。。
闺蜜说:你觉得怎么样
​

从上面的案例可以看出,代模式的特征是:

  • 真实角色和代理角色都需要实现抽象角色,才能都实现真正的目的。

  • 真实角色需要聚合到代理角色中,这样代理角色才能够转达真实角色想要表达什么。

代理模式的主要作用在于控制对其它对象的访问和使用,从而改变原来类与类之间的关系,可以用于实现程序的解耦和保护目标对象的安全性。常见的应用场景包括:远程调用、缓存处理、安全授权、延迟加载等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值