java8 策略模式_Java 8中的策略模式
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中的策略模式相关推荐
- java计数器策略模式_java设计模式(二十一)--策略模式
对于策略模式,我在很多面试题上看到过考察这一类的问题,这种模式也的确比较好用. 我感觉这种模式就是将不同实现的方法放到一个接口中,然后通过实现这个接口来实现不同的运行结果,这种模式有三部分构成: 策略 ...
- 设计模式(三)策略模式——在Spring中使用策略模式
前言 在 设计模式(一)策略模式 -- 策略模式结构 和 设计模式(二)策略模式 -- 在程序中通过枚举使用策略模式 两篇博文中分析了策略模式的基础使用,在实际的项目开发中要结合spring容器使用策 ...
- 重温经典之《企业应用架构模式》——.NET中的架构模式运用 (Base Patterns 1)
今天看看几个基本模式,这包括Gateway模式,Mapper模式,LayerSupertype模式和Separated Interface模式. 在这本书的最后一章,Martin Fowler放了一大 ...
- java的简单工厂模式_java设计模式之简单工厂模式
简单工厂模式的概念 就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建.简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例. ...
- ofb模式_密码学中的输出反馈模式(OFB)
ofb模式 This is an output feedback (OFB) mode is similar in structure to that of CFB in Cryptography. ...
- python编程模式_Python编程中的反模式
原标题:Python编程中的反模式 这篇文章收集了我在Python新手开发者写的代码中所见到的不规范但偶尔又很微妙的问题. 本文的目的是为了帮助那些新手开发者渡过写出丑陋的Python代码的阶段. 对 ...
- java 外观模式_Java设计模式11:外观模式
外观模式 外观模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的外观对象进行.外观模式是一个高层次的接口,使得子系统更易于使用. 医院的例子 现代的软件系统都是比较复杂的.假如把医院比作一 ...
- 什么java工厂模式_java的三种工厂模式是什么?
java的三种工厂模式:1.简单工厂模式,提供一个创建对象实例的功能,而无须关心其具体实现:2.工厂方法模式:3.抽象工厂模式,提供一个创建一系列相关或相互依赖对象的接口,无须指定它们具体的类. 一. ...
- java repository模式_MVC架构中的Repository模式 个人理解
个人理解:Repository是一个独立的层,介于领域层与数据映射层(数据访问层)之间.它的存在让领域层感觉不到数据访问层的存在,它提供一个类似集合的接口提供给领域层进行领域对象的访问.Reposit ...
最新文章
- mysql运维工资_MySQL运维踩坑
- Java解析html页面,获取想要的元素
- 【pmcaff】pm怎么跟妈妈解释自己是做什么的
- 洛谷 - P4721 【模板】分治 FFT(分治NTT)
- java restful接口开发实例_实战:基于Spring Boot快速开发RESTful风格API接口
- 转载:mongoDB java驱动学习笔记
- 解决“第一次偶然出现的异常”问题
- 50-00-010-配置-kylin-2.6.0官网配置
- 净利润大涨三倍、股价飙升,百度新上了一个秘密武器:强化学习
- Wpf 简单制作自己的窗体样式
- 【二叉树】牛客网:二叉树的镜像
- Python 性能分析入门指南
- 【Linux】后台 nohup 运行 python 程序
- MyBatis下载和环境搭建
- Excel树状数据绘制导出
- 苹果系统备份文件服务器地址,苹果备份文件在哪里能找到?默认路径在这儿(不知道的进来看看)...
- 小程序源码:独家全新娱乐性超高的喝酒神器
- Android 差分包制作流程分析
- 【SAP ABAP学习资料】SQL查询分析器——程序代码
- pwm一个时间单位_「硬见小百科」什么是PWM“死区”?
热门文章
- AT4995-[AGC034E] Complete Compress【树形dp】
- 2017 SEERC Divide and Conquer 树上差分
- Mysql调优你不知道这几点,就太可惜了
- laravel部署到服务器显示Permission denied
- C++描述杭电OJ 2018.母牛的故事 ||
- 新闻发布项目——接口类(categoryTBDao)
- 新闻发布项目——实体类(newsTb)
- JS进行性能测试(计时)
- 希尔排序+移位法(吊打交换法)
- java实现验证码3秒刷新一次