Вот хороший пример из здесь .
По сути, вы создаете простую версию Interface1, а затем добавляете к ней больше функциональности, создавая декорации (дополнительные классы), но всегда гарантируя, что декорации имеют один и тот же интерфейс, что позволяет использовать их в одном и том жеместа как любые предметы без декорации.
Из приведенной выше ссылки я привел пример.
Возьмите простое окно типа класса, а затем украсьте его полосами прокрутки:
// the Window interface
interface Window {
public void draw(); // draws the Window
public String getDescription(); // returns a description of the Window
}
// implementation of a simple Window without any scrollbars
class SimpleWindow implements Window {
public void draw() {
// draw window
}
public String getDescription() {
return "simple window";
}
}
Это декораторы, сначала абстрактный класс со всем общим кодом для шаблона декоратора.- обратите внимание, что он реализует Window
// abstract decorator class - note that it implements Window
abstract class WindowDecorator implements Window {
protected Window decoratedWindow; // the Window being decorated
public WindowDecorator (Window decoratedWindow) {
this.decoratedWindow = decoratedWindow;
}
public void draw() {
decoratedWindow.draw();
}
}
Теперь украшение, которое добавляет вертикальную полосу прокрутки к окну.Обратите внимание, что он расширяет WindowDecorator и, следовательно, Window и, следовательно, интерфейс Window
// the first concrete decorator which adds vertical scrollbar functionality
class VerticalScrollBarDecorator extends WindowDecorator {
public VerticalScrollBarDecorator (Window decoratedWindow) {
super(decoratedWindow);
}
public void draw() {
decoratedWindow.draw();
drawVerticalScrollBar();
}
private void drawVerticalScrollBar() {
// draw the vertical scrollbar
}
public String getDescription() {
return decoratedWindow.getDescription() + ", including vertical scrollbars";
}
}
Примеры шаблонов проектирования GoF в основных библиотеках Java содержит ссылки на множество других шаблонов, реализованных в Java.