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

  • 相关阅读:
    PAT 天梯赛 L2-003. 月饼 【贪心】
    PAT 天梯赛 L2-015. 互评成绩 【排序】
    PAT 天梯赛 L1-046. 整除光棍 【模拟除法】
    PAT 天梯赛 L1-006. 连续因子 【循环】
    PAT 天梯赛 L1-009. N个数求和 【模拟】
    HackerRank
    ZOJ 3961 Let's Chat 【水】
    ZOJ 3960 What Kind of Friends Are You? 【状态标记】
    ZOJ 3959 Problem Preparation 【水】
    ZOJ 3958 Cooking Competition 【水】
  • 原文地址:https://www.cnblogs.com/glsy/p/11073509.html
Copyright © 2011-2022 走看看