java8 策略模式

这是两个有关如何使用Java 8功能样式以及Cyclops模式匹配和Hamcrest库来实现策略模式设计的示例。

PrintDependingOnInput方法是一种策略,该策略将根据传递的日志对System.println一些消息。

AddPrefix是另一种策略,它将根据邮件内容向邮件添加前缀。

package com.marco.patternmatching; import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.startsWith;
import static org.hamcrest.core.AllOf.allOf;
import java.util.ArrayList;
import java.util.List;
import com.aol.cyclops.matcher.builders.Matching; public class FunctionalStrategy {public static void main(String[] args) {List<String> toTest = new ArrayList<>();toTest.add("INFO everything is fine");toTest.add("WARN something weird happened");toTest.add("ERROR NullPointerException");toTest.add("ERROR IOException");toTest.stream().forEach(FunctionalStrategy::printDependingOnInput);System.out.println("--------------------");List<String> messages = new ArrayList<>();messages.add("everything is fine");messages.add("something weird happened");messages.add("NullPointerException");messages.add("IOException");messages.stream().map(FunctionalStrategy::addPrefix).forEach(System.out::println);}public static void printDependingOnInput(String log) {Matching.when().isMatch(startsWith("INFO")).thenConsume(System.out::println).when().isMatch(startsWith("WARN")).thenConsume(message -> System.out.println("Found one warning : " + message)).when().isMatch(allOf(startsWith("ERROR"), containsString("NullPointerException"))).thenConsume(message -> System.err.println(message)).when().isMatch(allOf(startsWith("ERROR"), containsString("IOException"))).thenConsume(message -> System.err.println(message + " Retrying a couple of times")).match(log);}public static String addPrefix(String log) {return Matching.when().isMatch(allOf(not(containsString("Exception")), not(containsString("weird")))).thenApply(message -> "INFO " + message).when().isMatch(containsString("weird")).thenApply(message -> "WARN " + message).when().isMatch(containsString("Exception")).thenApply(message -> "ERROR " + message).match(log).get();}
}

干净整洁;)

翻译自: https://www.javacodegeeks.com/2015/06/strategy-pattern-in-java-8.html

java8 策略模式

java8 策略模式_Java 8中的策略模式相关推荐

  1. java计数器策略模式_java设计模式(二十一)--策略模式

    对于策略模式,我在很多面试题上看到过考察这一类的问题,这种模式也的确比较好用. 我感觉这种模式就是将不同实现的方法放到一个接口中,然后通过实现这个接口来实现不同的运行结果,这种模式有三部分构成: 策略 ...

  2. 设计模式(三)策略模式——在Spring中使用策略模式

    前言 在 设计模式(一)策略模式 -- 策略模式结构 和 设计模式(二)策略模式 -- 在程序中通过枚举使用策略模式 两篇博文中分析了策略模式的基础使用,在实际的项目开发中要结合spring容器使用策 ...

  3. 重温经典之《企业应用架构模式》——.NET中的架构模式运用 (Base Patterns 1)

    今天看看几个基本模式,这包括Gateway模式,Mapper模式,LayerSupertype模式和Separated Interface模式. 在这本书的最后一章,Martin Fowler放了一大 ...

  4. java的简单工厂模式_java设计模式之简单工厂模式

    简单工厂模式的概念 就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建.简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例. ...

  5. ofb模式_密码学中的输出反馈模式(OFB)

    ofb模式 This is an output feedback (OFB) mode is similar in structure to that of CFB in Cryptography. ...

  6. python编程模式_Python编程中的反模式

    原标题:Python编程中的反模式 这篇文章收集了我在Python新手开发者写的代码中所见到的不规范但偶尔又很微妙的问题. 本文的目的是为了帮助那些新手开发者渡过写出丑陋的Python代码的阶段. 对 ...

  7. java 外观模式_Java设计模式11:外观模式

    外观模式 外观模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的外观对象进行.外观模式是一个高层次的接口,使得子系统更易于使用. 医院的例子 现代的软件系统都是比较复杂的.假如把医院比作一 ...

  8. 什么java工厂模式_java的三种工厂模式是什么?

    java的三种工厂模式:1.简单工厂模式,提供一个创建对象实例的功能,而无须关心其具体实现:2.工厂方法模式:3.抽象工厂模式,提供一个创建一系列相关或相互依赖对象的接口,无须指定它们具体的类. 一. ...

  9. java repository模式_MVC架构中的Repository模式 个人理解

    个人理解:Repository是一个独立的层,介于领域层与数据映射层(数据访问层)之间.它的存在让领域层感觉不到数据访问层的存在,它提供一个类似集合的接口提供给领域层进行领域对象的访问.Reposit ...

最新文章

  1. mysql运维工资_MySQL运维踩坑
  2. Java解析html页面,获取想要的元素
  3. 【pmcaff】pm怎么跟妈妈解释自己是做什么的
  4. 洛谷 - P4721 【模板】分治 FFT(分治NTT)
  5. java restful接口开发实例_实战:基于Spring Boot快速开发RESTful风格API接口
  6. 转载:mongoDB java驱动学习笔记
  7. 解决“第一次偶然出现的异常”问题
  8. 50-00-010-配置-kylin-2.6.0官网配置
  9. 净利润大涨三倍、股价飙升,百度新上了一个秘密武器:强化学习
  10. Wpf 简单制作自己的窗体样式
  11. 【二叉树】牛客网:二叉树的镜像
  12. Python 性能分析入门指南
  13. 【Linux】后台 nohup 运行 python 程序
  14. MyBatis下载和环境搭建
  15. Excel树状数据绘制导出
  16. 苹果系统备份文件服务器地址,苹果备份文件在哪里能找到?默认路径在这儿(不知道的进来看看)...
  17. 小程序源码:独家全新娱乐性超高的喝酒神器
  18. Android 差分包制作流程分析
  19. 【SAP ABAP学习资料】SQL查询分析器——程序代码
  20. pwm一个时间单位_「硬见小百科」什么是PWM“死区”?

热门文章

  1. AT4995-[AGC034E] Complete Compress【树形dp】
  2. 2017 SEERC Divide and Conquer 树上差分
  3. Mysql调优你不知道这几点,就太可惜了
  4. laravel部署到服务器显示Permission denied
  5. C++描述杭电OJ 2018.母牛的故事 ||
  6. 新闻发布项目——接口类(categoryTBDao)
  7. 新闻发布项目——实体类(newsTb)
  8. JS进行性能测试(计时)
  9. 希尔排序+移位法(吊打交换法)
  10. java实现验证码3秒刷新一次