JavaRush/Java блог/Random/Паттерн (Шаблон) Делегирования

Паттерн (Шаблон) Делегирования

Статья из группы Random
участников
Паттерн (Шаблон) Делегирования — рассмотрим на самом простом примере. Есть класс А с каким-то методом f. Класс А — это внутренний не статический класс класса My.
public class My{
   public static void main(String[]args){
      My test = new My();
      My.A a1 = test.new A();
      a1.f();
      My.B b = test.new B();
      b.f();
   }

class A{
   void f(){
      System.out.println("f");
  }
}
}
Затем выведем на консоль то, что делает метод f. Для этого в методе main создаем объект класса А и вызываем метод f. Теперь создадим класс B. Нам нужно, чтобы он делал то же, что и класс А, но дублировать код мы не будем и использовать наследование тоже не будем, а в классе В создадим объект класса А, а затем в методе класса В вызовем метод класса А.
class B{
   A a = new A();
   void f(){
      a.f();
   }
}
Класс В делегирует выполнение каких-то задач другому классу. В данном случае классу А.
Комментарии (10)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
MR
Уровень 22
8 июля 2020, 14:19
My.A a1 = test.new A(); а без test работать не будет? Или будет? дикие для моего мозга конструкции
MR
Уровень 22
8 июля 2020, 14:22
собственно, сейчас-то я поняла, после того, как ещё несколько раз пробежалась по статье. но сложнааа и непривычно
Maxim Belich
Уровень 20
24 июня 2020, 13:03
Если честно, то эту статью кое-как понял только после прочтения этой статьи . Как по мне здесь пример такой себе ...
Igor Tarasov
Уровень 7
2 июля 2020, 01:52
ссылка не рабочая. пишет "Недостаточно средств на аккаунте".
Maxim Belich
Уровень 20
2 июля 2020, 09:20
Ага) видимо админ забыл за хостинг заплатить. Ну не важно, поищите в интернете другие статьи они явно будут лучше чем эта. Важно понимать этот паттерн, т.к. дальше идет паттерн "Адаптер", а паттерн делегирования и адаптер тесно связаны.
17 октября 2018, 09:58
Хотя бы проверила перед публикацией. Как А может быть внутренним для Му, если он вынесен за пределы Му?
Erik Ghukasyan
Уровень 28
17 февраля 2019, 13:42
Внимательно смотрите, Сергей. Класс А находится внутри класса My
Nikita Koliadin Full Stack Developer в Приватбанк
14 октября 2018, 10:06
Хорошая статья. Только код отформатируйте пожалуйста!)
Сергеев Виктор
Уровень 40
Master
14 октября 2018, 00:22
А в каких случаях он может быть полезен? Почему бы просто не использовать класс А?
Нина Можарская
Уровень 17
14 октября 2018, 01:12
ну например если нельзя использовать наследование (в Java единичное наследование у класса наследника только один родительский класс). Или же когда наследование можно использовать, но не нужно.Например у класса А имеется не 1 метод а 10, но для класса В нужен всего 1 метод класса А. Ну или более сложный пример когда можно применить этот шаблон - есть какой-то графический интерфейс с методом рисовать и три класса, которые его реализуют - треугольник, квадрат и круг. Нужно создать класс художника, который умеет рисовать все эти фигуры. Тогда решая такую задачу мы можем воспользоваться данным паттерном. В классе художника сделаем 2 метода. Один метод в качестве параметра будет получать конкретный экземпляр графики, а второй метод будет рисовать, вызывая методы рисования конкретного экземпляра.