学习使用Strategy模式

最近做的一个财务程序用到了策略模式,其中一个功能就是程序可以加载若干个财务Excel表格,对数据作一些处理后输出到一些新的表格中.其中需要处理的表格每个格式都不一样,所以要用不用的方法来读取,这时想到了策略模式,感觉场景还算比较合适.

下面说明如何使用策略模式
[color=red]一.编写父类[/color]
编写加载表格的父类, 定义一些公用变量和方法.
[code]
public abstract class LoadDataStrategy {

public LoadDataStrategy() {
super();
}

//默认方法
public TJFinanceData loadData(String filePath) {
TJFinanceData tjfd = new TJFinanceData();
try {
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(filePath));
HSSFWorkbook wb = new HSSFWorkbook(fs);
//默认读取方法.
}
}
} catch (Exception e) {
e.printStackTrace();
}
return tjfd;
}

//需子类实现
public abstract List loadProjectData(HSSFSheet sheet);

}[/code]

[color=red]二.编写子类[/color]
这时的子类就是针对不同的财务表格的不同算法,下面是其中一个,可以根据不同表格写出不同的子类.
[code]
public class FPTSBLoadData extends LoadDataStrategy {
public FPTSBLoadData() {
super();
// TODO Auto-generated constructor stub
}

//子类可以重写此方法
public TJFinanceData loadData(String filePath) {
…..
}
//子类实现
public List loadProjectData(HSSFSheet sheet) {
….
}
}[/code]

[color=red]三.算法选择类[/color]
用来提供客户端可以自由选择算法
[code] public class LoadDataSolve {

//算法实例
private LoadDataStrategy strategy;

//根据算法类名创建算法实例
public LoadDataSolve(String className) {
try {
Class LoadData = Class.forName(className);
this.strategy = (LoadDataStrategy) LoadData.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
}
//直接传入算法实例
public LoadDataSolve(LoadDataStrategy strategy) {
this.strategy = strategy;
}

//调用算法
public TJFinanceData loadData(String filePath) {
return strategy.loadData(filePath);
}

//切换算法
public void changeAlgorithm(LoadDataStrategy newAlgorithm) {
this.strategy = newAlgorithm;
}

} [/code]

[color=red]四.调用[/color][code]
public class TestLoad{
…………………
public TJFinanceData testLoadData(String filePath){
//使用FPTSBLoadData算法
TJFinanceData solver= new LoadDataSolve( “com.company.financel.dataload.FPTSBLoadData”);
TJFinanceData fd = solver.loadData(filePath);
Return fd;
}
………

}
[/code]

[b]网上摘录:[/b]

[color=red]策略模式达到了在运行期间,可以自由切换算法的目的。[/color]
实际整个Strategy的核心部分就是抽象类的使用,使用Strategy模式可以在用户需要变化时,修改量很少,而且快速.Strategy和Factory有一定的类似,Strategy相对简单容易理解,并且可以在运行时刻自由切换。Factory重点是用来创建对象。

Strategy适合下列场合:
[b]1[/b].以不同的格式保存文件;

[b]2[/b].以不同的算法压缩文件;

[b]3[/b].以不同的算法截获图象;

[b]4.[/b]以不同的格式输出同样数据的图形,比如曲线 或框图bar等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值