2009年4月9日星期四

JavaDesign_023:策略模式 Strategy(摘录+整理)

1. 特点
(1)定义一系列的算法,把这些算法封装成一个个单独的类。
(2)这些算法类有共同的接口,使得彼此可以互相替换。
(3)运行时某一时刻只能使某一算法,使用哪一个,由客户端决定。

2. 代码架构(1)环境类:聚合抽象策略类,即持有一个抽象策略类的实例。
(2)抽象策略(接口或抽象类,视情况而定)。
(3)具体策略类,继承或实现抽象策略类。

3. Java中对命令模式的应用
(1)AWT库中的LayoutManager。
(2)Swing库中的Border。
4. 与装饰模式的区别(1)装饰模式是在不改变接口的情况下,增强对象的功能;策略模式是在不改变接口的情况下,使不同的算法可以互相替换。
(2)同时需要使用多个算法的情形不适用策略模式,应该考虑装饰模式。
比如有些折扣算法比较特殊:要求不管使用哪种折扣算法,折扣总金额不能超过1000元。
这就需要先用不同的算法算出折扣,看看是否超过1000元。


5. 典型应用场景(1)以不同的格式保存文件(2)以不同的算法压缩文件(3)以不同的算法截获图象(4)以不同的排序算法排序:二元排序、冒泡排序、堆栈排序、快速排序、基数排序。
(5)以不同的格式输出同样数据的图形:曲线图、柱状图、饼状图。
(6)网上购物中不同产品的不同的计算折扣算法。

参考文献:
1. 《设计模式》 板桥里人
2. 《Java与模式》 阎宏

没有评论: