首页 > 解决方案 > 如何实现代理模式?

问题描述

我试图了解如何制作和使用代理设计模式。我不知道我做错了什么。任何建议,将不胜感激:

加载方法应该模拟从远程服务器下载配置......它有点。2秒延迟应该只启动一次,然后就可以顺利进行了。

public interface ConfigLoader {

     String load();
}

真实对象

import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.RandomStringUtils;
import pl.sdacademy.prog.streams.MyExepction;

@Getter
@Setter
public class ConfigLoaderImplementation implements ConfigLoader {
    private String configuration;
    private String serverUrl;

    public ConfigLoaderImplementation(final String serverUrl) {
        this.serverUrl = serverUrl;
    }

    @Override
    public String load() {
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            throw new MyException("Sleeping canceled!", e);
        }
        System.out.println("Configuration from " + getServerUrl() + " downloaded successfully");
        String generatedConfiguration = RandomStringUtils.randomAlphabetic(10);
        setConfiguration(generatedConfiguration);
        return generatedConfiguration;
    }
}

代理

import lombok.Data;

@Data

public class ConfigLoaderProxy implements ConfigLoader {

    private ConfigLoader proxy;

    public ConfigLoaderProxy(String url) {
        this.proxy = proxy;
    }

    @Override
    public String load() {
        if (proxy == null) {
            proxy = new ConfigLoaderImplementation("www.blablA.com");
            return proxy.load();

        } else {
            return proxy.load();
        }
        //todo

    }
}

测试类,主要

public class ConfigLoaderDemo {
    public static void main(String[] args) {

        ConfigLoader proxy = new ConfigLoaderProxy("sdasd");

        proxy.load();
        proxy.load();
        proxy.load();
    }
}

标签: javadesign-patternsproxy

解决方案


public class ConfigLoaderProxy implements ConfigLoader {

    private final ConfigLoader configLoader;
    private String configuration;

    public ConfigLoaderProxy(final ConfigLoader configLoader) {
        this.configLoader = configLoader;
    }

    @Override
    public String load() {
        if (configuration == null) {
            configuration = configLoader.load();
        }
        return configuration;
    }
}

推荐阅读