• 装饰者模式【结构模式】


    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;
      }
      }

  • 相关阅读:
    P1352 没有上司的舞会(树形DP入门,自底向上更新)
    链表和函数指针
    c语言中文件操作
    数据结构中的栈和堆与计算机内存划分的栈区和堆区的区别
    计算机组成原理—cpu
    Linux中一切皆文件
    G 火山哥周游世界(树上走过确切k个点的最短时间,树形dp)
    Paint Box(涂色要求相邻不能同色,求方案数,容斥)
    失衡天平
    hdu6761lyndon分解
  • 原文地址:https://www.cnblogs.com/zhuxudong/p/10164119.html
Copyright © 2020-2023  润新知