当前位置:K88软件开发文章中心编程语言JavaScriptCoffeeScript → 文章内容

CoffeeScript 策略模式

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-15 15:34:21

由 珍珍阿姨 创建,Carrie 最后一次修改 2016-08-12 策略模式问题解决问题的方式有多种,但是你需要在程序运行时选择(或是转换)这些方法。解决方案在策略对象(Strategy objects)中封装你的算法。例如,给定一个未排序的列表,我们可以在不同情况下改变排序算法。基类StringSorter = (algorithm) -> sort: (list) -> algorithm list策略bubbleSort = (list) -> anySwaps = false swapPass = -> for r in [0..list.length-2] if list[r] > list[r+1] anySwaps = true [list[r], list[r+1]] = [list[r+1], list[r]] swapPass() while anySwaps anySwaps = false swapPass() listreverseBubbleSort = (list) -> anySwaps = false swapPass = -> for r in [list.length-1..1] if list[r] < list[r-1] anySwaps = true [list[r], list[r-1]] = [list[r-1], list[r]] swapPass() while anySwaps anySwaps = false swapPass() list使用策略sorter = new StringSorter bubbleSortunsortedList = ['e', 'b', 'd', 'c', 'x', 'a']sorter.sort unsortedList# => ['a', 'b', 'c', 'd', 'e', 'x']unsortedList.push 'w'# => ['a', 'b', 'c', 'd', 'e', 'x', 'w']sorter.algorithm = reverseBubbleSortsorter.sort unsortedList# => ['a', 'b', 'c', 'd', 'e', 'w', 'x']讨论“没有作战计划在第一次接触敌人时便能存活下来。” 用户如是,但是我们可以运用从变化的情况中获得的知识来做出适应改变。在示例末尾,例如,数组中的最新项是乱序排列的,知道了这个细节,我们便可以通过切换算法来加速排序,只要简单地重赋值就可以了。练习将StringSorter扩展为AlwaysSortedArray类来实现规则序列的所有功能,但是要基于插入方法自动分类新的项(例如push对比shift)。

CoffeeScript 策略模式