装饰器模式
下文笔者讲述装饰器模式的简介说明,如下所示
创建一个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
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。