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

  • 相关阅读:
    Asp.Net Mvc: 应用BindAttribute
    Mvc内建功能(DefaultModelBinder)自动绑定。
    生成随机字母字符串(数字字母混和)
    C#中实现输入汉字获取其拼音(汉字转拼音)的2种方法
    集合里查找数据
    C#自定义导出数据到Excel中的类封装
    MySQL性能优化的最佳20+条经验
    DevExpress.XtraGrid.view.gridview 属性说明
    c# 连接Mysql数据库
    ADO.NET 结构 集中数据库联接结构
  • 原文地址:https://www.cnblogs.com/zhuxudong/p/10164119.html
Copyright © 2011-2022 走看看