Top.Mail.Ru

Декоратор Java: пример паттерна.

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

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

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

Декоратор Java

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

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

Паттерн на примере

Допустим у нас есть некий интерфейс Bike:
public interface Bike {
public int getSpeed();
public int getHisWeight();
}

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

public class StandartBike 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. Он на себя
принимает класс StandartBike и прибавляет нашему стандартному мотоциклу
скорость:

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

}

Возможно вам будет интересно почитать статью “Data Scientist: кто это и что он должен знать?”

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

public class App {
public static void main(String[] args) {
Bike standartBike = new StandartBike();
System.out.println(“Скорость стандартного мотоцикла – ” +
String.valueOf(standartBike.getSpeed()));
System.out.println(“Стандартный мотоцикл может принимать вес” +
String.valueOf(standartBike.getHisWeight()));

Bike sportBike = new SportBike(standartBike);
}

Поделись статьей с друзьями!

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *