Decorator Pattern: run time da var olan obje yada objelere yeni davranış şekilleri eklemek için kullanılır. Bu pattern bir tür subclass işlemidir ancak extend işlemi compile time da değil runtime da yapılmaktadır. Bu da ekstra flexibility kazandırır.
Decorator pattern bir decorator objesinin diğer bir objeyi wrap etmesi şeklinde yapılır. Ve bu genelde decorator objesinin constructorına diğer objenin parametre olarak girmesi ile sağlanır.
Örnek Kod:
DecoratedWindowTest.java
package decoratorPattern;
public class DecoratedWindowTest {
public static void main(String[] args) {
// create a decorated Window with horizontal and vertical scrollbars
Window decoratedWindow = new HorizontalScrollBarDecorator (
new VerticalScrollBarDecorator(new SimpleWindow()));
// print the Window's description
System.out.println(decoratedWindow.getDescription());
}
}
HorizontalScrollBarDecorator.java
package decoratorPattern;
// the second concrete decorator which adds horizontal scrollbar functionality
class HorizontalScrollBarDecorator extends WindowDecorator {
public HorizontalScrollBarDecorator(Window decoratedWindow) {
super(decoratedWindow);
}
public void draw() {
drawHorizontalScrollBar();
decoratedWindow.draw();
}
private void drawHorizontalScrollBar() {
// draw the horizontal scrollbar
}
public String getDescription() {
return decoratedWindow.getDescription()
+ ", including horizontal scrollbars";
}
}
SimpleWindow.java
package decoratorPattern;
// implementation of a simple Window without any scrollbars
class SimpleWindow implements Window {
public void draw() {
// draw window
}
public String getDescription() {
return "simple window";
}
}
VerticalScrollBarDecorator.java
package decoratorPattern;
// the first concrete decorator which adds vertical scrollbar functionality
class VerticalScrollBarDecorator extends WindowDecorator {
public VerticalScrollBarDecorator(Window decoratedWindow) {
super(decoratedWindow);
}
public void draw() {
drawVerticalScrollBar();
decoratedWindow.draw();
}
private void drawVerticalScrollBar() {
// draw the vertical scrollbar
}
public String getDescription() {
return decoratedWindow.getDescription()
+ ", including vertical scrollbars";
}
}
Window.java
package decoratorPattern;
// the Window interface
interface Window {
public void draw(); // draws the Window
public String getDescription(); // returns a description of the Window
}
WindowDecorator.java
package decoratorPattern;
// 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;
}
}
UML Of Decorator Pattern
Hiç yorum yok:
Yorum Gönder