美文网首页
装饰模式 示例

装饰模式 示例

作者: 黑色海鸥 | 来源:发表于2019-05-30 20:17 被阅读0次

    UML图片

    组合模式.png

    代码示例

    创建一个接口

    public interface Shape {
       void draw();
    }
    

    创建实现接口的实体类。

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

    创建实现了 Shape 接口的抽象装饰类

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

    创建扩展了 ShapeDecorator 类的实体装饰

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

    使用 RedShapeDecorator 来装饰 Shape 对象

    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();
       }
    }
    

    执行程序,输出结果

    Circle with normal border
    Shape: Circle
    
    Circle of red border
    Shape: Circle
    Border Color: Red
    
    Rectangle of red border
    Shape: Rectangle
    Border Color: Red
    

    相关文章

      网友评论

          本文标题:装饰模式 示例

          本文链接:https://www.haomeiwen.com/subject/cldbtctx.html