functional program 不是某些语言的专利,使用了这个库,我们也可以在java中进行方便的函数式编程了。实际上java设计之初忽略了函数也是对象,使我们只好在很简单的情况下也要使用Interface,使得代码过于复杂。另外也由于我们更习惯命令式编程。
使用java时如果注意interface、匿名类、不变类的使用,或充分应用反射(一个java发展),我们也可以进行函数式风格的编程。
例子很多 Google一下吧。
我爱oo,我爱java。http://oofrank.blogchina.com
functional program 不是某些语言的专利,使用了这个库,我们也可以在java中进行方便的函数式编程了。实际上java设计之初忽略了函数也是对象,使我们只好在很简单的情况下也要使用Interface,使得代码过于复杂。另外也由于我们更习惯命令式编程。
使用java时如果注意interface、匿名类、不变类的使用,或充分应用反射(一个java发展),我们也可以进行函数式风格的编程。
例子很多 Google一下吧。
将球编号,先选8个球,天平两边各4个,如果平衡,则不一样的在剩余的4个中,比较简单,不再赘述。
如果天平不平衡,假设左边1,2,3,4比右边5,6,7,8重。首先可知9,10,11,12为标准球。将5,6,7换成9,10,11,然后将9,10,11和2,3,4交换位置,可能出现三种情况:
1。天平变平衡了,可以得知特殊球在5,6,7中,且特殊球比标准球轻。
2。天平仍然是左边重右边轻,可以得知特殊球是1或者是8。
3。天平变成了左边轻右边重,可以得知特殊球在2,3,4中,且特殊球比标准球重。
上面三种情况均可以在剩余的一次称量机会中找到那个特殊球,问题得解。
1、Extract Method:导出方法,将大方法变为多个小方法
2、Replace Temp with Query:使用函数代替临时变量
3、Extract Class:导出类
4、Extract Interface:导出接口
5、Introduce Parameter Object:当参数列表过长时,将这些参数封装成一个对象
6、Preserve Whole Object:保持对象完整,当一个方法的参数从一个类获取时,传递类实例而不是这些值.
7、Move Method: 将方法从一个类转移到另一个类中
8、Move Field: 将域从一个类转移到另一个类中
9、Replace Data Value with Object:将基本数据类型用类代替
10、Replace Type Code with State/Strategy:使用State或Strategy模式替换枚举类型值
11、Replace Conditional with Polymorphism: 使用多态改写原来case分支代码(Templet)
12、Replace Parameter with Explicit Methods:以明确函数取代参数,减少参数个数,增加函数个数
13、Introduce Null Object:引入Null Object
14、Inline Class:将一个类去除,并将代码直接引入到引用的类中
15、Rename Method:方法改名
16、Hide Delegate:将委托关系隐藏
16、Remove Middle Man:去除中间对象
17、Inline Method:将一个方法去除,并将代码直接引入到引用的方法中
18、Extract Superclass:导出基类
19、Introduce Foreign Method:通过增加一个以类实例为参数的方法,达到给该类实例增加功能的目的
20、Introduce Local Extension:通过继承或包装,达到给某类实例增加功能的目的
21、Replace Inheritance with Delegation:将继承关系变为委托关系
一年多来,总是有一些支言片语想写下来与人分享,但又没有好的方式,突然想起blog,而且以前见过”竹笋炒肉”的blog,于是自己也申请一个,记录一些想法。(内容为空)