装饰器模式
下文笔者讲述装饰器模式的简介说明,如下所示
创建一个Shape接口
实现Shape接口实体类
创建一个实现Shape接口的抽象装饰类ShapeDecorator
将Shape对象作为它的实例变量
RedShapeDecorator实现ShapeDecorator的实体类
RedShapeDecorator来装饰Shape对象
装饰器模式简介
装饰器模式(Decorator Pattern):
向一个现有的对象添加新的功能
同时不改变原有的机构
装饰器模式属于结构型模式
它主要采用对现有类进行包装而产生一个新类,这就是装饰器的魅力之处
注意事项:
1.装饰器模式相对生成子类的方式更加灵活
2.装饰器模式可避免产生更多的子类,而导致子类爆炸
例:创建一个Shape接口
实现Shape接口实体类
创建一个实现Shape接口的抽象装饰类ShapeDecorator
将Shape对象作为它的实例变量
RedShapeDecorator实现ShapeDecorator的实体类
RedShapeDecorator来装饰Shape对象
创建接口
Shape.java
public interface Shape {
void draw();
}
创建实现接口实体类
Rectangle.java
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Shape: Rectangle");
}
}
Circle.java
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Shape: Circle");
}
}
创建实现Shape 接口的抽象装饰类
ShapeDecorator.java
public abstract class ShapeDecorator implements Shape {
protected Shape decoratorShape;
public ShapeDecorator(Shape decoratorShape) {
this.decoratorShape = decoratorShape;
}
@Override
public void draw() {
decoratorShape.draw();
}
}
创建扩展ShapeDecorator类的实体装饰类
RedShapeDecorator.java
public class RedShapeDecorator extends ShapeDecorator {
public RedShapeDecorator(Shape decoratorShape) {
super(decoratorShape);
}
@Override
public void draw() {
decoratorShape.draw();
setRedBorder(decoratorShape);
}
private void setRedBorder(Shape decoratorShape) {
System.out.println("Border Color: Red");
}
}
----测试代码------
使用 RedShapeDecorator来装饰 Shape 对象
public class DecoratorPatternDemo {
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: Circle Circle of red border Shape: Circle Border Color: Red Rectangle of red border Shape: Rectangle Border Color: Red
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


