strategy是属于设计模式中 对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类。
stratrgy应用比较广泛,比如,公司经营业务变化图,可能有两种实现方式,一个是线条曲线,一个是框图(bar),这是两种算法,可以使用strategy实现。
这里以字符串替代为例, 有一个文件,我们需要读取后,希望替代其中相应的变量,然后输出.关于替代其中变量的方法可能有多种方法,这取决于用户的要求,所以我们要准备几套变量字符替代方案。
首先,我们建立一个抽象类reptemprule 定义一些公用变量和方法:
| public abstract class reptemprule{ protected string oldstring=""; public void setoldstring(string oldstring){ this.oldstring=oldstring; } protected string newstring=""; public string getnewstring(){ return newstring; } public abstract void replace() throws exception; } |
在reptemprule中有一个抽象方法abstract需要继承明确,这个replace里其实是替代的具体方法。我们现在有两个字符替代方案,
1.将文本中aaa替代成bbb;
2.将文本中aaa替代成ccc;
对应的类分别是reptempruleone reptempruletwo
public class reptempruleone extends reptemprule{ |
| public class reptempruletwo extends reptemprule{ public void replace() throws exception{ newstring=oldstring.replacefirst("aaa", "ccc") system.out.println("this is replace two"); } } |
至此我们完成了类图的设计和程序编制.调用如下:
public class test{ ...... public void testreplace(){ //使用第一套方案进行替换. } ..... } |
实际整个strategy的核心部分就是抽象类的使用,使用strategy模式可以在用户需要变化时,修改量很少,而且快速。
strategy和factory有一定的类似,strategy相对简单容易理解:
strategy适合下列场合:
1.以不同的格式保存文件;
2.以不同的算法压缩文件;
3.以不同的算法截获图象;
4.以不同的格式输出同样数据的图形,比如曲线 或框图bar等。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器