设计模式之代理模式

什么是设计模式
设计模式是经常使用、大多数人知道,有特定目录的代码设计经验。设计模式可以提高代码可维护性,可提升代码运行效率,也能提高系统可靠性。设计模式可以分为三类,分别是创建型、结构型和行为型。以下就代理模式简要概述。

什么是代理模式
代理模式就是一个类代表另一个类,也就是静态代码代理。我们可以用代理类做一些控制,这种模式也是结构型模式。

应用场景
1、限制目标类的访问
2、控制目标类,在代理类放置一些特殊逻辑达到控制目标类的作用

代理模式与适配器模式区别:
代理模式不改变目标类,而适配器模式会改变传入的对象从而影响内部功能。
代理模式与装饰器模式区别:
代理模式不会对对象的功能进行增加,而装饰器模式会增加目标类功能。

小试牛刀
比如我们下载图片功能,我们第一次下载需要加载图片,第二次则不用加载了以节省内存。此时,我们可以通过代理类进行特殊处理。
对象依赖关系为:
在这里插入图片描述

1、创建图片接口并提供下载方法

/**
 * 图片
 * @author senfel
 * @version 1.0
 * @date 2022/8/25 11:08
 */
public interface Image {
    /**
     * 下载图片
     */
    void down();
}

2、实现图片接口复写下载方法,并在构造方法调用加载图片方法

/**
 * 下载图片
 * @author senfel
 * @version 1.0
 * @date 2022/8/25 11:09
 */
public class RealImage implements Image{

    private String imageName;

    public RealImage(String imageName) {
        this.imageName = imageName;
        loadImage();
    }

    /**
     * 加载图片
     */
    private void loadImage() {
        System.err.println("加载图片》》 名称为: "+imageName);
    }

    @Override
    public void down() {
        System.err.println("下载图片》》 名称为: "+imageName);
    }
}

3、增加代理类

/**
 * 下载图片代理
 * @author senfel
 * @version 1.0
 * @date 2022/8/25 11:10
 */
public class ProxyImage implements Image {

    private String imageName;
    private RealImage realImage;

    public ProxyImage(String imageName) {
        this.imageName = imageName;
    }

    /**
     * 下载图片方法
     * 特殊处理如果存在对象则不再创建图片对象,直接下载
     */
    @Override
    public void down() {
        if(Objects.isNull(realImage)){
            realImage = new RealImage(imageName);
        }
        realImage.down();
    }
}

4、测试代理模式

/**
 * 代理模式测试
 * @author senfel
 * @version 1.0
 * @date 2022/8/25 11:28
 */
public class TestProxyPattern {

    @Test
    public void test(){
        //下载图片
        ProxyImage proxyImage = new ProxyImage("代理模式测试效果图");
        proxyImage.down();
        //再次下载
        proxyImage.down();
    }
}

测试结果:

加载图片》》 名称为: 代理模式测试效果图
下载图片》》 名称为: 代理模式测试效果图
下载图片》》 名称为: 代理模式测试效果图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小沈同学呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值