装饰器模式

Posted glsy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰器模式相关的知识,希望对你有一定的参考价值。

一、模式名

装饰者模式, Decorator

二、解决的问题

装饰者模式顾名思义,就是在原来的对象上加入一些修饰的部分,用以丰富原有对象的功能。但装饰器模式中的装饰器类和被装饰的对象保持一致,一般是继承或实现同一个父类或接口。

三、解决方案

装饰者模式的UML图如下所示。

技术图片

示例代码如下

public class DecoratorExer 
   public static void main(String[] args) throws Exception 
      House apartment = new Apartment();
      Decorator europeStyle = new EuropeStyle(apartment);

      apartment.show();
      europeStyle.show();
   


abstract class House 
   abstract String getFacade();
   abstract String getBase();
   void show() 
      System.out.println(getFacade() + getBase());
   


class Apartment extends House 
   @Override
   String getFacade() 
      return "外立面";
   

   @Override
   String getBase() 
      return "楼房";
   


abstract class Decorator extends House 
   House house;

   public Decorator(House house) 
      this.house = house;
   


class EuropeStyle extends Decorator 
   public EuropeStyle(House house) 
      super(house);
   

   @Override
   String getFacade() 
      return "淡黄色的" + house.getFacade();
   

   @Override
   String getBase() 
      return "10层的" + house.getBase();
   

可以看到,定义了House抽象类,还有Decorator抽象类,其中Decorator继承于House,并且分别定义了House和Decorator的实现类。通过传入被装饰的对象,生成具体的装饰对象,使用该装饰对象完成后续操作。

常用场景:

1. 最经典的使用装饰器模式的是Jdk中的io操作,比如BufferedReader和FileReader

以上是关于装饰器模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之-装饰器模式

《设计模式》之装饰器模式

装饰器模式

装饰器模式:为啥我们需要抽象装饰器? [复制]

java设计模式之装饰器模式

浅谈设计模式:装饰器模式|中介模式|原型模式