设计模式之代理模式

得意时要看淡,失意时要看开。不论得意失意,切莫大意;不论成功失败,切莫止步。志得意满时,需要的是淡然,给自己留一条退路;失意落魄时,需要的是泰然,给自己觅一条出路设计模式之代理模式,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

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

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

应用场景
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();
    }
}

测试结果:

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/154688.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!