Это декоратор или шаблон стратегии, или ни то, ни другое?

У меня есть следующий интерфейс.

PowerSwitch.java

public interface PowerSwitch {
    public boolean powerOn();
    public boolean powerOff();
    public boolean isPowerOn();
}

Вышеупомянутый интерфейс должен состоять из минимального набора методов, из которых могут быть получены любые другие функциональные возможности, чтобы максимально упростить добавление дополнительных реализаций PowerSwitch.

Я хотел бы добавить функциональность к интерфейсу PowerSwitch во время выполнения (что делают декораторы), создав класс, который содержит композицию экземпляра PowerSwitch и добавляет новые методы, такие как два toggleOnOff () методы ниже. Таким образом, мне нужно реализовать два метода переключения только один раз, и это будет применяться ко всем реализациям PowerSwitch.

Считается ли это хорошей / плохой практикой? Если плохо, то какие-нибудь другие рекомендации?

На самом деле он не соответствует шаблону декоратора, так как добавляет дополнительные методы. Это шаблон стратегии или шаблон композиции? Или у него другое название паттерна? Есть ли такая вещь, как «декоратор интерфейса»?

PowerSwitchDecorator.java

public class PowerSwitchDecorator {
    private PowerSwitch ps;

    public PowerSwitchDecorator(PowerSwitch ps) {
        this.ps = ps;
    }

    public void toggleOnOff(int millis) throws InterruptedException{
        powerOn();
        Thread.sleep(millis);
        powerOff();
    }

    public void toggleOnOff(){
    powerOn();
    powerOff();
    }

    public boolean powerOn() {
        return ps.powerOn();
    }

    public boolean powerOff() {
        return ps.powerOff();
    }

    public boolean isPowerOn() {
        return ps.isPowerOn();
    }
}
8
задан Ravindra babu 11 July 2016 в 14:45
поделиться