Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемНина Таланова
1 Язык программирования Java Дмитриев Андрей Владиславович Май 2007
2 Декоратор Нужно создать несколько классов, расширяющих функциональность друг друга. Некоторые из классов могут реализовывать некие свойства, не присущие другим классам. Наследование позволяет сделать это только для одного нового свойства. Декоратор позволяет организовывать цепь расширяемой функциональности без наследования. Примером служит цепь потоков ввода вывода.
3 Декоратор (базовый класс) public class Decorator extends JComponent { public Decorator (JComponent c) { setLayout(new BorderLayout()); add("Center", c); }
4 Рамка кнопки public class CoolDecorator extends Decorator { //истина когда курсор поверх кнопки boolean mouse_over: JComponent thisComp; public CoolDecorator(JComponent c) { super(c); c.addMouseListener(…); //отслеживает мышь }
5 Рамка кнопки (cont.) public class CoolDecorator … //описываем специфичную отрисовку public void paint(Graphics g) { super.paint(g); if (!mouse_over) { //дорисовать рамку или удалить её }
6 Рамка кнопки (cont.) Container jp = getContentPane(); jp.add( new CoolDecorator(new JButton("Cbutton"))); jp.add( new CoolDecorator(new JButton("Dbutton"))); jp.add(Quit = new JButton("Quit"));
7 Диагональ public class SlashDecorator extends Decorator { public SlashDecorator(JComponent c) { super(c); } public void paint(Graphics g) { super.paint(g); g.setColor(Color.red); g.drawLine(0, 0, w1, h1); }
8 Диагональ (cont.) jpanel.add(new SlashDecorator( new CoolDecorator(new JButton("Dbutton"))));
9 Пример декоратора Пакет java.io содержит реализованный шаблон декоратор: FilterInputStream – добавляет фильтрацию к стандартному InputStream. BufferedInputStream - добавляет буферизацию. CheckedInputStream – поддерживает контрольную сумму. DataInputStream – читает примитивные данные. и т.д.
10 Vector & Stack java.util.Stack является наследником класса Vector и не перекрывает его методов для доступа к данным.
11 Выводы Шаблон Декоратор позволяет расширять функциональность любого класса при наследовании от него или от базового класса. Необходимая функциональность добавляется при создании объекта, а не при наследовании. Дерево наследования сокращается по сравнению со стандартным подходом расширения функциональности при наследовании.
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.