zoukankan      html  css  js  c++  java
  • 装饰器模式

    一、模式名

    装饰者模式, Decorator

    二、解决的问题

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

    三、解决方案

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

    clipboard

    示例代码如下

    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

  • 相关阅读:
    C
    B
    A
    G
    BZOJ_1208_&_Codevs_1258_[HNOI2004]_宠物收养所_(平衡树/set)
    Codevs_1230_元素查找_(set/Hash)
    POJ_2503_Babelfish_(Trie/map)
    POJ_2001_Shortest_Prefixes_(Trie)
    BZOJ_3670_[NOI2014]_动物园_(kmp)
    BZOJ_3196_二逼平衡树_(树套树,线段树+Treap)
  • 原文地址:https://www.cnblogs.com/glsy/p/11073509.html
Copyright © 2011-2022 走看看