装饰者模式【结构模式】

public class Decorator {
/**
* 装饰者模式:
* Attach additional responsibility to an object dynamically keeping the same interface.
* Decorators provide a flexible alternative to subclassing for extending functionality.
* 将额外的责任附加到一个动态保持相同接口的对象上,装饰者提供一种灵活的选择将扩展功能子类化。
*/
@Test
public void all() {
final PlainMaker plainMaker = PlainMaker.builder().build();
final String info = "hello world";
String make = plainMaker.make(info);
assertEquals(make,info);

final String title = "重大新闻";
    // 给新闻增加标题
    final TitleMaker titleMaker = TitleMaker.builder()
            .newsMaker(plainMaker)
            .title(title).build();
    make = titleMaker.make(info);
    assertEquals(String.join("\r\n",title,info),make);

    final String copyRight = "版权所有 15505883728";
    // 给新闻增加版权
    final copyRightMaker copyRightMaker = copyRightMaker.builder()
            .newsMaker(titleMaker)
            .copyRight(copyRight)
            .build();
    make = copyRightMaker.make(info);
    assertEquals(String.join("\r\n",info,copyRight),make);
}

}

/**

  • 1)定义允许执行装饰的功能接口,也可以是抽象类。
    */
    interface NewsMaker {
    String make(String info);
    }

/**

  • 2)具体实现功能的实例类
    */
    @Builder
    class PlainMaker implements NewsMaker {
    @Override
    public String make(String info) {
    return info;
    }
    }

/**

  • 3)对功能进行装饰的装饰类
    */
    @Builder
    class TitleMaker implements NewsMaker {
    private final NewsMaker newsMaker;
    private final String title;

    @Override
    public String make(String info) {
    return title + "\r\n" + newsMaker.make(info);
    }
    }

/**

  • 4)对功能进行装饰的装饰类
    */
    @Builder
    class copyRightMaker implements NewsMaker {
    private final NewsMaker newsMaker;
    private final String copyRight;

    @Override public String make(String info) { return newsMaker.make(info) + "\r\n" + copyRight; } }

相关文章

自1998年我国取消了福利分房的政策后,房地产市场迅速开展蓬...
文章目录获取数据查看数据结构获取数据下载数据可以直接通过...
网上商城系统MySql数据库设计
26个来源的气象数据获取代码
在进入21世纪以来,中国电信业告别了20世纪最后阶段的高速发...