装饰器模式
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
以上是关于装饰器模式的主要内容,如果未能解决你的问题,请参考以下文章