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

  • 相关阅读:
    Python爬虫爬取网页图片
    Python爬虫爬取贴吧的帖子内容
    Android导入AS工程
    Arcgis for Silverlight学习(一)
    Silverlight学习笔记之页面跳转
    视频信号的垂直消隐和水平消隐[转]
    【DM642学习笔记八】色度重采样
    java从入门到卖肠粉系列
    [Selenium] Automation Test Manual(Selenium)
    [Selenium] Selenium私房菜(新手入门教程)
  • 原文地址:https://www.cnblogs.com/glsy/p/11073509.html
Copyright © 2011-2022 走看看