package com.javarush.task.task18.task1811;
/*
Wrapper (Decorator)
*/
public class Solution {
public static void main(String[] args) {
new Thread(new DecoratorRunnableImpl(new DecoratorMyRunnableImpl(new RunnableImpl()))).start()
//Вот этот(!) Почему запускаются все нити?
}
public static class RunnableImpl implements Runnable {
@Override
public void run() {
System.out.println("RunnableImpl body");
}
}
public static class DecoratorRunnableImpl implements Runnable {
private Runnable component;
public DecoratorRunnableImpl(Runnable component) {
this.component = component;
}
@Override
public void run() {
System.out.print("DecoratorRunnableImpl body ");
component.run();
}
}
public static class DecoratorMyRunnableImpl implements Runnable {
private Runnable component;
public DecoratorMyRunnableImpl(Runnable component) {
this.component = component;
}
@Override
public void run() {
System.out.print("DecoratorMyRunnableImpl body ");
component.run();
}
}
}
Anastasia Ilyushenko
34 уровень
Объясните, пожалуйста, что означает этот код и в чем смысл задачи?
Решен
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Илья ГековMaster
25 августа 2018, 19:42решение
Это пример паттерна "декоратор" (почитайте в интернете).
В данном случае:
- Объект класса DecoratorRunnableImpl получает в конструкторе и сохраняет в переменную component ссылку на объект класса DecoratorMyRunnableImpl, который в свою очередь получает в конструкторе и сохраняет ссылку на объект класса RunnableImpl.
- Каждый из этих классов является реализацией Runnable, и в своем методе run запускают run методы объектов, сохраненных в переменных component.
- Получается сначала запускается нить DecoratorRunnableImpl, которая запускает run нити DecoratorMyRunnableImpl, которая запускает run нити RunnableImpl.
+10
Артем Divertitto Senior Android-разработчи в United Tech Master
27 августа 2018, 09:57
нить DecoratorRunnableImpl
Скорее нить тут одна, а это просто классы которые имплементят интерфейс Runnable, метод которого будет исполнен в другом потоке
+5
Илья ГековMaster
27 августа 2018, 11:07
Согласен, неправильно сформулировал
0