竹笋

首页 » 问答 » 常识 » 设计模式责任链模式,让程序员摆脱乱糟
TUhjnbcbe - 2023/3/27 20:17:00
北京中科医院假 http://m.39.net/baidianfeng/a_5154120.html

责任链模式函数式编程在java中的实践

在java中借用javascript大规模使用的functionalprogramming

基础思想-函数式编程什么是函数式编程?

函数式编程是一种编程的范式(Aprogrammingparadigm.)。就像面向过程、面向对象。总的来说,FunctionisKing,函数为王。

函数式编程是一种思维模式。该使用什么样的方式去解决你的问题?就像你不想去破解一个代码块完整性(内聚),那么你可以加入一个切面,去影响该代码块的执行结果。

为什么要函数式编程?Object-orientedinjavascriptgetstricky.在复杂的处理过程中,java的面向对象也许不能很好处理繁琐,复杂得业务逻辑,对象往往纠缠不清。Safer,easiertodebug/maintain.可维护性更高。如何去函数式编程?

Doeverythinginfunction:以函数方式思考。对于一个业务逻辑,如果以函数的角度思考,那么可以抽离出若干的函数进行处理,而非乱糟糟的零散的代码

规定好Input/Output。一个函数规定好IO,就能去更好地承接上下游业务,更好地区分模块。

下面就是标准的函数式编程

varname="alan";functiongreet(){name="jade";return"Hi,Im"+name;}functionsayMyName(name){return"Hi,Im"+name;}greet();sayMyName(name);="Hi,Imalan"责任链模式在jdk8中的实践

在有了上面的函数式编程的思想,接下来结合jdk的Function语法糖,可以产生很强的实战性代码

下面以一个赚钱---买西红柿----洗西红柿----切西红柿----煮西红柿的例子。

完整的例子

publicclassPipleLineTest{staticclassMoney{}staticclassRawTomato{}staticclassCleanTomato{}staticclassTomatoSlice{}staticclassCookedTomato{}finalstaticSupplierMoneymakeMoney=()-{System.out.println("我要努力赚钱买西红柿!!");Moneymoney=newMoney();System.out.println("赚到钱了,返回一堆钱");returnmoney;};finalstaticFunctionMoney,RawTomatobuyRawTomato=(money)-{System.out.println("去市场买西红柿!");finalRawTomatorawTomato=newRawTomato();System.out.println("买好西红柿了,得到了一个有泥的西红柿,需要洗一下,回家!");returnrawTomato;};finalstaticFunctionRawTomato,CleanTomatocleanTomato=(rawTomato)-{System.out.println("回到家,准备洗西红柿!");finalCleanTomatocleanTomato1=newCleanTomato();System.out.println("洗好西红柿了!返回一个干净的西红柿");returncleanTomato1;};finalstaticFunctionCleanTomato,TomatoSlicecutTomato=(cleanTomato)-{System.out.println("准备切西红柿!");finalTomatoSlicetomatoSlice=newTomatoSlice();System.out.println("切好西红柿了!返回西红柿切片");returntomatoSlice;};finalstaticFunctionTomatoSlice,CookedTomatocookTomato=(tomatoSlice)-{System.out.println("准备烹饪西红柿!");finalCookedTomatocookedTomato=newCookedTomato();System.out.println("西红柿了煮好了!返回了一个煮好的西红柿,开饭!");returncookedTomato;};publicstaticvoidmain(String[]args){finalMoneymoney=makeMoney.get();buyRawTomato.andThen(cleanTomato).andThen(cutTomato).andThen(cookTomato).apply(money);}}

由上面可以看出,这个完整的步骤每一个步骤的输入输出都非常明确,维护的时候,就可以清晰看到哪个步骤需要调整/修改了。并且强制你去思考输入输出,会规范你的代码,提高可读性。

总结

使用函数式编程,可以很好地模块化每个步骤的代码。而责任链可以很好地承接我们的业务逻辑,而JDK8的函数式语法糖就赋予这2个思想很好实践的能力。

1
查看完整版本: 设计模式责任链模式,让程序员摆脱乱糟