Рівень 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. Виправданим залишається варіант з Вікі, тобто робота на рівні інтерфейсів.
Дуже невдала лекція і завдання в ній. Заплутали зовсім мене, поки тут не вважав. У всіх джерелах, де читав, цей шаблон використовується замість наслідування, а тут разом - звідси плутанина в голові.
Однак, все ж вважаю, що завдання на застосування декораторів невдалі. У них пропонується наслідувати декорується клас, що в корені не відповідає паттерну декоратора. Декоратор може успадковувати абстрактний клас, або інтерфейс, що об'єднують декоратор з цільовим класом. У разі ж спадкування класу, прийдеться реалізовувати конструктор суперкласу, що призведе до створення зайвого примірника класу. Навіщо? Я розумію, що ви даєте базу і припускаєте самостійне подальше поглиблення в тему, але прошу, не варто спочатку давати некоректні приклади.
Голову собі зламав з цими прикладами і завданнями з курсу. Про цей патерн пишуть, що використовується замість наслідування. А в цьому курсі разом з успадкуванням. Хотів тут уточнювати вже, побачив відповідь, який все роз'яснив, спасибі.