设计模式-装饰器模式

客官°小女子只卖身不卖艺 2022-11-09 14:29 220阅读 0赞

设计模式-装饰器模式

    • 介绍
    • 优点
    • 缺点
    • 使用场景
    • 注意事项
    • 实现
      • 步骤 1
      • 步骤 2
      • 步骤 3
      • 步骤 4
      • 步骤5

介绍

装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。

优点

装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。

缺点

多层装饰比较复杂

使用场景

1、扩展一个类的功能。
2、动态增加功能,动态撤销。

注意事项

可代替继承。

实现

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NzZG41NjU5NzM4NTA_size_16_color_FFFFFF_t_70_pic_center

步骤 1

创建一个接口:
Shape.java

  1. public interface Shape {
  2. void draw();
  3. }

步骤 2

创建实现接口的实体类。
Rectangle.java

  1. public class Rectangle implements Shape {
  2. @Override
  3. public void draw() {
  4. System.out.println("Shape: Rectangle");
  5. }
  6. }

Circle.java

  1. public class Circle implements Shape {
  2. @Override
  3. public void draw() {
  4. System.out.println("Shape: Circle");
  5. }
  6. }

步骤 3

创建实现了 Shape 接口的抽象装饰类。
ShapeDecorator.java

  1. public abstract class ShapeDecorator implements Shape {
  2. protected Shape decoratedShape;
  3. public ShapeDecorator(Shape decoratedShape){
  4. this.decoratedShape = decoratedShape;
  5. }
  6. public void draw(){
  7. decoratedShape.draw();
  8. }
  9. }

步骤 4

创建扩展了 ShapeDecorator 类的实体装饰类。
RedShapeDecorator.java

  1. public class RedShapeDecorator extends ShapeDecorator {
  2. public RedShapeDecorator(Shape decoratedShape) {
  3. super(decoratedShape);
  4. }
  5. @Override
  6. public void draw() {
  7. decoratedShape.draw();
  8. setRedBorder(decoratedShape);
  9. }
  10. private void setRedBorder(Shape decoratedShape){
  11. System.out.println("Border Color: Red");
  12. }
  13. }

步骤5

  1. public class DecoratorPatternDemo {
  2. public static void main(String[] args) {
  3. Shape circle = new Circle();
  4. ShapeDecorator redCircle = new RedShapeDecorator(new Circle());
  5. ShapeDecorator redRectangle = new RedShapeDecorator(new Rectangle());
  6. System.out.println("Circle with normal border");
  7. circle.draw();
  8. System.out.println("\nCircle of red border");
  9. redCircle.draw();
  10. System.out.println("\nRectangle of red border");
  11. redRectangle.draw();
  12. }
  13. }

参考文献:
装饰器模式

发表评论

表情:
评论列表 (有 0 条评论,220人围观)

还没有评论,来说两句吧...

相关阅读

    相关 设计模式-装饰模式

    > 装饰器模式也称为包装模式是指在不改变原有对象的基础上,将功能附加到对象上,提供比继承更有弹性的替代方案(扩展原有对象的功能),属于结构型模式 装饰器模式的核心是功能扩展,

    相关 设计模式——装饰模式

    > 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 >

    相关 设计模式-装饰模式

    装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个

    相关 设计模式----装饰模式

           今天来学习分析下装饰器模式,首先我们分析它的名字应该要知道这个模式的作用应该就是类似我们用装饰品一样,随用随取的特点。发挥你的想象,如果我们写的程序能有这样的特点