Рівень 18 план рівня і доп

Рівень 18: план рівня і доп. матеріали

План рівня:
  • Знайомство з потоками: InputStream / OutputStream, FileInputStream, FileOutputStream
  • Знайомство з потоками
  • Знайомство з InputStream, OutputStream, Reader, Writer
  • Приклади роботи з FileInputStream, FileOutputStream
  • BufferedInputStream, ByteArrayInputStream
  • Шаблон проектування «Обгортка» (Wrapper / Decorator)
  • Буфер і буферизація
  • Знайомство з StringBuilder

На цьому рівні потоки введення-виведення розглядаються вибірково.
Додаткове поглиблене вивчення буде на 31-32 рівнях.

Повернутися до навчання java онлайн на JavaRush

Лекція 18, урок 6 (лекція Емі про BufferedInputStream)
Наведений приклад обгортки (клас CatWrapper як обгортка над класом Cat) НЕ скомпілюється т. К. Конструктор CatWrapper (CatWrapper cat) не викликає конструктор батьківського класу Cat (String name).

І void в методі printName забули. Але зате змушує подумати коли код копіюєш в иде :)

Т.к сайт Wikijava.org зламався, вирішив для JavaRush спробувати відновити Thinking in Java

Вітаю товариші! Було б добре, якби дали посилання на робочі сайти. Цей сайт, який заблокувався мені подобався, тому що там все глибоко пояснювалося. У мене є книжка «Філософія java», але там код розібрати неможливо, тобто можливо ... опечатки багато.

Не цілком зрозуміло як узгоджується твердження Декоратор передбачає розширення функціональності об'єкту без визначення підкласів. з прикладом з лекції. CatWrapper банально успадковує Cat, тим самим дозволяючи розширювати функціональність за рахунок поліморфізму - через перевизначення методів. Той же getName () можна викликати за допомогою super. Таким чином і коду вийде менше.
P.S. Виправданим залишається варіант з Вікі, тобто робота на рівні інтерфейсів.

Дуже невдала лекція і завдання в ній. Заплутали зовсім мене, поки тут не вважав. У всіх джерелах, де читав, цей шаблон використовується замість наслідування, а тут разом - звідси плутанина в голові.

Однак, все ж вважаю, що завдання на застосування декораторів невдалі. У них пропонується наслідувати декорується клас, що в корені не відповідає паттерну декоратора. Декоратор може успадковувати абстрактний клас, або інтерфейс, що об'єднують декоратор з цільовим класом. У разі ж спадкування класу, прийдеться реалізовувати конструктор суперкласу, що призведе до створення зайвого примірника класу. Навіщо? Я розумію, що ви даєте базу і припускаєте самостійне подальше поглиблення в тему, але прошу, не варто спочатку давати некоректні приклади.

Голову собі зламав з цими прикладами і завданнями з курсу. Про цей патерн пишуть, що використовується замість наслідування. А в цьому курсі разом з успадкуванням. Хотів тут уточнювати вже, побачив відповідь, який все роз'яснив, спасибі.

Схожі статті