Другое

Декоратор Java: пример паттерна, шаблон проектирования на языке Java

Lorem ipsum dolor

Декоратор Java — это структурный паттерн, который используется при динамическом проектировании объекта. То есть при помощи этого паттерна можно к объекту «прикрутить» дополнительные свойства функциональности.

Объясним на примере их жизни. Допустим, у вас есть какой-то автомобиль. У него есть ограничение верхней скорости. Если вы захотите увеличить его максимум скорости, то первым делом вы можете провести тюнинг и заменить или усовершенствовать какие-то элементы:

  • заменить колеса на легкосплавные;

  • убрать все лишнее из салона;

  • расточить двигатель;

  • в крайнем случае поменять двигатель на более мощный.

То есть вы не бежите сразу в салон за новым автомобилем, хотя не исключено, что кто-то именно так и делает.

Декоратор Java дает возможность в динамическом режиме менять функциональность объекта, прямо в режиме его выполнения, применяя к нему классы паттерна. При этом не происходит никакого дополнительного влияния на другие объекты того же класса.

 

Декоратор Java 

Паттерн декоратор Java применяется тогда, когда:

  • нужно изменить функциональность какого-то объекта в динамическом режиме, не трогая другие объекты;

  • нужно снять обязанности с какого-нибудь объекта;

  • невозможно или нецелесообразно использовать подклассы.

 

Паттерн декоратор Java на примере

Допустим, у нас есть некий интерфейс Bike:

public interface Bike {

    public int getSpeed();

    public int getHisWeight();

}

И в наличии будет стандартный мотоцикл с классом StandardBike:

public class StandardBike implements Bike {

    private int speed = 40;

    private int HisWeight = 90;

    @Override

    public int getSpeed() {

        return this.speed;

    }

    @Override

    public int getHisWeight() {

        return this.HisWeight;

    }

}

Если вдруг мы захотим из нашего простого мотоцикла сделать полноценный гоночный спортбайк, то для этого у нас есть в декораторе класс SportBike. Он на себя принимает класс StandardBike и прибавляет нашему стандартному мотоциклу скорость:

public class SportBike implements Bike {

    private Bike bike;

    public SportBike(Bike bike){

        this.bike = bike;

    }

    @Override

    public int getSpeed() {

        return this.bike.getSpeed() + 60;

    }

    @Override

    public int getHisWeight() {

        return this.bike.getHisWeight();

    }

}

Вот и получилось, что из обычного мотоцикла мы сделали полноценный спортбайк:

public class App {

    public static void main(String[] args) {

        Bike standardBike = new StandardBike();

        System.out.println("Скорость стандартного мотоцикла - " + String.valueOf(standardBike.getSpeed()));

        System.out.println("Стандартный мотоцикл может принимать вес" + String.valueOf(standardBike.getHisWeight()));

        Bike sportBike = new SportBike(standardBike);

}

Схожие статьи

Что такое NLP: расшифровываем термин простыми словами для чайников
Другое

Что такое NLP: расшифровываем термин простыми словами для чайников

Управление ходом исполнения программного кода в ЯП Crystal.(06)
Другое

Управление ходом исполнения программного кода в ЯП Crystal.(06)

Aws Lambda: что это такое, зачем оно используется и кому это нужно?
Другое

Aws Lambda: что это такое, зачем оно используется и кому это нужно?

Преимущества системы планирование ресурсов предприятия (ERP) для бизнеса
Другое

Преимущества системы планирование ресурсов предприятия (ERP) для бизнеса