美文网首页
包装器模式

包装器模式

作者: 魔焰之 | 来源:发表于2019-07-10 22:26 被阅读0次

定义

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

装饰器模式是对象结构动态修改方式,相较于继承关系,装饰器更加灵活,和代理模式相比,装饰器模式更偏重与对象本质行为或者属性的加强,比如窗口系统添加主题。而代理模式则更偏重于非本质行为的添加,比如文件系统中添加权限管理和修改日志。

实例

public interface Shape {
   void draw();
}
public class Circle implements Shape {
 
   @Override
   public void draw() {
      System.out.println("Shape: Circle");
   }
}
public class Rectangle implements Shape {
 
   @Override
   public void draw() {
      System.out.println("Shape: Rectangle");
   }
}
public class RedShapeDecorator extends ShapeDecorator {
 
   public RedShapeDecorator(Shape decoratedShape) {
      super(decoratedShape);     
   }
 
   @Override
   public void draw() {
      decoratedShape.draw();         
      setRedBorder(decoratedShape);
   }
 
   private void setRedBorder(Shape decoratedShape){
      System.out.println("Border Color: Red");
   }
}
public abstract class ShapeDecorator implements Shape {
   protected Shape decoratedShape;
 
   public ShapeDecorator(Shape decoratedShape){
      this.decoratedShape = decoratedShape;
   }
 
   public void draw(){
      decoratedShape.draw();
   }  
}

其类图关系为:


UML

上述是给Shape实例添加边框的实例,从功能角度出发,使用继承并重写draw方法就可以实现边框,只是有多少个需要边框的shape子类,就需要重写多少个类,这样类的数量很容易会爆炸,而采用包装器模式,保持该包装器职责单一,这里RedShapeDecorator类只负责添加红色边框(实际上不应该硬编码为红色),如果Circle类需要边框,也可以直接用RedShapeDecorator包装一下就行,而且多个包装器可以相互组合包装,能组合出复杂的功能。

总结

优点:

  • 装饰类和被装饰类是可以独立的,低耦合的。互相都不用知道对方的存在
  • 装饰模式是继承的一种替代方案,无论包装多少层,返回的对象都是is-a的关系(上面的例子:包装完还是Phone类型)。
  • 实现动态扩展,只要继承了装饰器就可以动态扩展想要的功能了。

缺点:

  • 多层装饰是比较复杂的,提高了系统的复杂度。不利于我们调试

在Java中,对类功能增强的方式三种:

  • 继承:重写或者修改类原有行为和属性
  • 代理模式:主要用于增加类非本质功能和属性,其本质上不是增强类原有功能,而是增加类非本质功能
  • 包装器模式: 主要用于增强类本质功能和属性,其本质是增强类原有能力

相关文章

  • 2021-07-26 装饰器模式与代理模式

    装饰器模式 定义 装饰器模式(Decorator Pattern)也叫包装模式(Wrapper Pattern),...

  • 包装器模式

    定义 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类...

  • 装饰器模式/包装器模式

    在电视剧《相爱十年》中,主角肖然把出现了品控问题的安尔雅肥皂换了个包装、改了套说辞变成了全新的品牌浴雪清,并成功的...

  • 装饰器模式(Decoretor Pattern)

    装饰器模式(decoretor pattern)也称为包装器模式(wrapper pattern),是指在不改变原...

  • RxJava 中的设计模式(二)装饰器模式

    介绍 装饰器模式(Decorator Pattern)又叫包装模式(Wrapper Pattern),允许向一个现...

  • 2018-07-10装饰器

    装饰器模式 装饰模式和适配器模式都是 包装模式 (Wrapper Pattern),它们都是通过封装其他对象达到设...

  • API装饰者模式--代理模式

    概述 编写基于另外一组类的包装器接口,结构化设计模式可以处理接口包装任务。按照包装器层和原始接口的差异递增程度划分...

  • 设计模式之装饰器模式

    在阎宏博士的《JAVA与模式》的书中,对装饰器模式的描述如下:装饰模式又名包装(Wrapper)模式。装饰模式以对...

  • java设计模式-装饰器模式(Decorator)

    定义 装饰器模式又名包装(Wrapper)模式。装饰器模式以对客户端透明的方式拓展对象的功能,是继承关系的一种替代...

  • 设计模式(结构型模式)

    适配器模式、 装饰器模式、 代理模式、 外观模式、 桥接模式、 组合模式、 享元模式 适配器模式 即定义一个包装类...

网友评论

      本文标题:包装器模式

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