每周学点设计模式(2)——策略模式(下)-java开发java经验技巧

每周学点设计模式(2)——策略模式(下)-java开发java经验技巧

ID:30845814

大小:58.00 KB

页数:8页

时间:2019-01-03

每周学点设计模式(2)——策略模式(下)-java开发java经验技巧_第1页
每周学点设计模式(2)——策略模式(下)-java开发java经验技巧_第2页
每周学点设计模式(2)——策略模式(下)-java开发java经验技巧_第3页
每周学点设计模式(2)——策略模式(下)-java开发java经验技巧_第4页
每周学点设计模式(2)——策略模式(下)-java开发java经验技巧_第5页
资源描述:

《每周学点设计模式(2)——策略模式(下)-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、每周学点设计模式(2)——策略模式(下)-Java开发Java经验技巧每周学点设计模式(2)——策略模式(下)本文作者:ImportNcw-唐尤华未经许可,禁止转载!在策略模式(上)屮,留下了一些练习。通过这些练习可以了解JavaAPRSWT如何实际应用策略模式。下篇将给出这些练习的参考分析,欢迎大家一起讨论。#1.请说明策略模式符合哪些面向对象设计原则?让我们再回顾一卜•策略模式:•?策略模式中,通过接口(interface)实现了业务与具体实现的隔离。所以,策略模式符合“面向接口,而不是面向实现”的编程原则。•在实现貝体的策略(算法)吋,通过实现接口可以

2、方便地增加多个具体实现。所以,策略模式符合“开放封闭原则,对扩展开放,对修改封闭覽•业务代码(Context)只依赖规则接口(Strategy),不依赖具体实现。所以,策略模式符合“依赖倒置原则,高层(业务模块)不依赖底层模块(具体算法),只依赖抽象接口#2.请说明策略模式有什么优点和缺点。•优点:遵循面向对彖设计原则,降低设计耦合、便于扩展。•缺点:当实现算法较多时,会增加需要维护的类的数量。可以使用工厂方法來解决。#3.请用说明下列JavaAPI设计中是如何使用策略模式的?Java实例1.集合、数组排序(sort)实际编程中最常见的莫过于排序了。在Jav

3、aAPI中,Collections,sort是常用方法之一(JDK7代码):publicstaticvoidsort(List〈T>list,Comparatorc){Object[]a二1ist.toArray();Arrays,sort(a,(Comparator)c);Listiteratori=list.listiterator();for(intj=0;jvoidsort(T[]a,Comp

4、arator^?superT>c){if(LegacyMergeSort.userRequested)lcgac}41crgcSort(3,c);elseTimSort.sort(a,c);}/**Toberemovedinafuturerelease.*/privatestaticvoidlegacyMergeSort(T[]a,Comparatorc){T[]aux二a.clone();if(c二二null)mergcSort(aux,a,0,a.1cngth,0);elsemergeSort(aux,a,0,a.length,0

5、,c);}这里是如何运用策略模式的呢?•Context:是实际调用排序的代码,即Collections的类。可以看到,默认使用了TimSort进行排序,排序的算法与对象的compare具体实现无关。•Strategy:即具体的对象比较接口,Comparator□•ConcreteStrategy:具体的比较算法,通过Compnnitor实现。例如实现人小写敏感、大小写不敏感或任意规则的比对。Java实例2.正则表达式正则表达式也是日常开发常用的工具,让我们来看看Pattern,Matcher是如何运用策略模式的。下面以一段简单的正则调用代码为例:Patter

6、npattern=Pattern,compile(z,ab,z,Pattern.CASE_1NSENS1T1VE);Matchermatcher二pattern,matcher(/zABcabdAb/z);//usingMatcherfind(),group(),start()andend()methodswhile(matcher,find()){System,out.printIn(z,Foundthetext+matcher,group()+〃〃startingat〃+matcher,start()+〃indexandendingatindex〃+m

7、atcher.end());可以看到,上而的示例屮对字符串”ABcabdAb"用”ab”进行大小写不敏感匹配。•Context:是实际调用正则表达式匹配的代码,即Matcher类。町以看至【J,Matcher.find()实际执行了正则匹配并返回匹配结果。•Strategy:即匹配的接口。这里并没有使用Java的interface,而是通过Pattem构造函数进行了传递,只要填入了Pattem(String,int),正则表达式和匹配参数,即实现了匹配需要的接口。•ConcreteStrategy:具休的匹配算法,pattern字符串需要符合Javail*则

8、表达式的语法规则,而匹配的参数flags由Patte

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。