您的位置:首页 > 编程语言 > Java开发

Java实现(10)——装饰者模式(Decorator Pattern)

2016-12-17 10:13 549 查看
装饰者模式允许开发者向一个已经存在的对象中增加新的功能,而不改变对象的结构。这种模式创建一个原类的包装类,通过提供额外的功能保持原有对象的简洁性。

本例中通过创建一个Shape接口,具体实现Shape接口的类,创建装饰类ShapeDecorator实现Shape接口,同时拥有一个Shape对象的实例。



public interface Shape {
void draw();
}
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Shape: Cricle");
}
}
public class Rectangle implements Shape {

@Override
public void draw() {
System.out.println("Shape: Rectangle");
}
}

public abstract class ShapeDecorator  implements Shape{
protected Shape decoratedShape;
public ShapeDecorator(Shape decoratedShape) {
this.decoratedShape = decoratedShape;
}
@Override
public void draw() {
decoratedShape.draw();
}
}

public class RedShapeDecorator extends ShapeDecorator{
public RedShapeDecorator(Shape decoratedShape) {
super(decoratedShape);
}
@Override
public void draw() {
decoratedShape.draw();
setRedBorder(decoratedShape);
}
public void setRedBorder(Shape decoratedShape) {
System.out.println("Border Color: Red");
}
}

public class Demo {
public static void main(String[] args) {
Shape circle = new Circle();
Shape redCircle = new RedShapeDecorator(new Circle());
Shape 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();
}
}


输出:
Circle with normal border

Shape: Cricle

Circle of red border

Shape: Cricle

Border Color: Red

Rectangle of red border

Shape: Rectangle

Border Color: Red
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: