zoukankan      html  css  js  c++  java
  • 装饰者模式【结构模式】

    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("
    ", title, info), make);
    
    	final String copyRight = "版权所有 15505883728";
    	// 给新闻增加版权
    	final CopyRightMaker copyRightMaker = CopyRightMaker.builder()
    			.newsMaker(titleMaker)
    			.copyRight(copyRight)
    			.build();
    	make = copyRightMaker.make(info);
    	assertEquals(String.join("
    ", title, 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 + " " + 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) + " " + copyRight;
      }
      }

  • 相关阅读:
    【结对编程收获】
    【第二次个人作业】结对作业Core第一组:四则运算生成PB16061082+PB16120517
    【第七周读书笔记】读《计算机系统详解》
    【第五周课堂作业】创新案例分析
    【第六周读书笔记】计算机体系结构读后感
    个人总结——马睿淳
    团队项目心得(6.15)
    团队项目心得
    《代码大全》读书笔记——第九周
    《我是一只IT小小鸟》(续)读书笔记——第八周
  • 原文地址:https://www.cnblogs.com/zhuxudong/p/10164119.html
Copyright © 2011-2022 走看看