有趣的设计——java的行为参数化
作者:星晴(当地小有名气,小到只有自己知道的杰伦粉)
今天公司离职了很多人,公司也没有安排什么事,我也不知道要干什么,每天在公司看看技术论坛,看看博客,写写文章打发时间吧,公司现在的氛围真的让人难受,希望过段时间有所好转吧。
今天跟大家分享一下java的行为参数化有什么好处,应用场景是什么?
前言
在软件工程中,众所周知,不管你做什么,用户的需求肯定会变。比方说餐厅采购人员去市场挑选鱼,当然鱼的选择有很多要求,比如品种,重量等等,反正就是食客想要什么,餐厅就会去这么做,毕竟做生意都是这样。 采购人员跟市场人员沟通后,市场人员就会统计有多少符合要求的鱼,那我们做的就是去筛选符合条件的鱼。
小试牛刀,筛选鱼
一般做法,首先创建一个鱼这个类,然后getSelectFish,遍历所有的鱼,如果有匹配的就放到数组里面,最后返回。以后有扩展,复制一份getSelectFish,里面的判断换掉就行了。
初步改进
把过滤参数放到方法签名里面,这样是不是就会减少复制的代码,但是请注意,如果在加一个筛选条件是不是又要复制一份,多一个参数。作为软件工程师怎么能打破DRY(do not repeat yourself)的软件工程原则呢?
行为参数化
行为参数化就是可以帮助处理频繁变更的需求的一种软件开发模式。
言以蔽之,它意味着拿出一个代码块,把它准备好却不去执行它。这个代码块以后可以被程序的其他部分调用,这意味着可以推迟这块代码的执行例如,可以将代码块作为参数传递给另一个方法,稍后再去执行它。这样,这个方法的行为就基于那块代码被参数化了。
这样getSelectFish就可以适应所有的过滤条件,再也不用重复写getSelectFish了,当然你如果觉得这样就结束了,那你太没有追求了,我们如何优化代码呢?
优化代码
通过Lambda表达式可以把几个过滤类去掉,是不是更简单了,优化的路上我们要坚持不懈,如何可以更优化呢?
泛型进行通用
这样getSelectFish是不是更加通用了,可以适配所有的实物了
总结:如果遇到频繁变更的过滤条件,可以采用行为参数化进行设计。
关注公众号,有更多好玩的等着你!!!