1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| interface Shape { void draw(); }
class Rectangle implements Shape {
@Override public void draw() { System.out.println("Shape: Rectangle"); } }
class Circle implements Shape {
@Override public void draw() { System.out.println("Shape: Circle"); } }
abstract class ShapeDecorator implements Shape { protected Shape decoratedShape;
public ShapeDecorator(Shape decoratedShape) { this.decoratedShape = decoratedShape; }
public void draw() { decoratedShape.draw(); } }
class RedShapeDecorator extends ShapeDecorator {
public RedShapeDecorator(Shape decoratedShape) { super(decoratedShape); }
@Override public void draw() { decoratedShape.draw(); setRedBorder(decoratedShape); }
private void setRedBorder(Shape decoratedShape) { System.out.println("Border Color: Red"); } }
public class DecoratorPatternDemo { public static void main(String[] args) { Shape circle = new Circle(); ShapeDecorator redCircle = new RedShapeDecorator(new Circle()); ShapeDecorator redRectangle = new RedShapeDecorator(new Rectangle()); System.out.println("Circle with normal border"); circle.draw();
System.out.println("\nCircle of red border"); redCircle.draw();
System.out.println("\nRectangle of red border"); redRectangle.draw(); } }
|