Как реализовать шаблон прокси? - PullRequest
1 голос
/ 27 февраля 2020

Я пытаюсь понять, как создать и использовать шаблон проектирования прокси. Понятия не имею, что я делаю не так. Буду признателен за любые предложения:

Метод загрузки должен имитировать загрузку конфигурации с удаленного сервера ... и это вроде как. Задержка в 2 секунды должна запускаться только один раз, а затем она должна go плавно.

public interface ConfigLoader {

     String load();
}

RealObject

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;
    }
}

Proxy

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();
    }
}

1 Ответ

0 голосов
/ 03 марта 2020
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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...