`
java虫
  • 浏览: 533305 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

学习使用Strategy模式

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

下面说明如何使用策略模式
一.编写父类
编写加载表格的父类, 定义一些公用变量和方法.
 
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);

}


二.编写子类
这时的子类就是针对不同的财务表格的不同算法,下面是其中一个,可以根据不同表格写出不同的子类.
public class FPTSBLoadData extends LoadDataStrategy {
	public FPTSBLoadData() {
		super();
		// TODO Auto-generated constructor stub
	}
	
//子类可以重写此方法
	public TJFinanceData loadData(String filePath) {
	…..
	}
	 //子类实现
	public List loadProjectData(HSSFSheet sheet) {
		….
	}
}


三.算法选择类
用来提供客户端可以自由选择算法
 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;
	}

} 


四.调用
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;
}
………

}


网上摘录:

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

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

2.以不同的算法压缩文件;

3.以不同的算法截获图象;

4.以不同的格式输出同样数据的图形,比如曲线 或框图bar等
分享到:
评论

相关推荐

    设计模式C++学习之策略模式(Strategy)

    设计模式C++学习之策略模式(Strategy)

    一个strategy模式的例子.rar_strategy_设计模式

    一个stragegy模式的例子,学习设计模式的可以参考

    设计模式之策略(Strategy)模式

    这份文档讲诉了设计模式之策略(Strategy)模式,希望可以帮助学习的人!

    Java面试 java设计模式整理 单例、工厂、策略等 面试使用,学习使用

    13、策略模式(strategy) 12 14、模板方法模式(Template Method) 13 15、观察者模式(Observer) 14 16、迭代子模式(Iterator) 16 17、责任链模式(Chain of Responsibility) 18 18、命令模式(Command) 19 ...

    学习php设计模式 php实现策略模式(strategy)

    策略模式可以使算法可独立于使用它的客户而变化 策略模式变化的是算法 二、策略模式结构图   三、策略模式中主要角色 抽象策略(Strategy)角色:定义所有支持的算法的公共接口。通常是以一个接口或抽象来实现。...

    面向对象初学者必须掌握的几种设计模式

    Observer:Swing中的事件模型 工厂模式 Factory:在JDK中遍地都是,比如JDBC、JNDI等,是学习Spring的基础 命令模式 Command:Struts框架的基石 单例模式 Singleton:最简单的设计模式,大量框架都使用了它...

    研磨设计模式(完整带书签).part2.pdf

    《研磨设计模式》在内容上深入、技术上实用、和实际开发结合程度很高,书中大部分的示例程序都是从实际项目中简化而来,因此很多例子都可以直接拿到实际项目中使用。如果你想要深入透彻地理解和掌握设计模式,并期望...

    设计模式解析-英文

    Adapter模式 72 第8章 开拓视野 82 第9章 Strategy模式 98 第10章 Bridge模式 113 第11章 Abstract Factory模式 138 第12章 专家设计之道 154 第13章 用模式解决CAD/CAM问题 162 第五部分 迈向新的设计方式 第14章 ...

    设计模式--C++

    5.9 STRATEGY(策略)—对象行为型模式 208 5.10 TEMPLATE METHOD(模板方法)—类行为型模式 214 5.11 VISITOR(访问者)—对象行为型模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 ...

    设计模式可复用面向对象软件的基础.zip

    1.8 怎样使用设计模式 20 第2章 实例研究:设计一个文档编 辑器 22 2.1 设计问题 23 2.2 文档结构 23 2.2.1 递归组合 24 2.2.2 图元 25 2.2.3 组合模式 27 2.3 格式化 27 2.3.1 封装格式化算法 27 2.3.2 Compositor...

    研磨设计模式(完整带书签).part1.pdf

    《研磨设计模式》在内容上深入、技术上实用、和实际开发结合程度很高,书中大部分的示例程序都是从实际项目中简化而来,因此很多例子都可以直接拿到实际项目中使用。如果你想要深入透彻地理解和掌握设计模式,并期望...

    设计模式(.PDF)

    1.8 怎样使用设计模式 20 第2章 实例研究:设计一个文档编 辑器 22 2.1 设计问题 23 2.2 文档结构 23 2.2.1 递归组合 24 2.2.2 图元 25 2.2.3 组合模式 27 2.3 格式化 27 2.3.1 封装格式化算法 27 2.3.2 Compositor...

    ASP.NET设计模式-杨明军译(源码)

    5.1.5 Strategy模式 5.2 应用企业模式 5.2.1 Specification模式 5.2.2 Composite模式 5.2.3 Layer Supertype模式 5.3 应用设计原则 5.3.1 依赖倒置原则和依赖注入模式 5.3.2 接口分离原则 5.3.3 里氏替换...

    GOLF设计模式(C++语言版)

    1.8 怎样使用设计模式 20 第2章 实例研究:设计一个文档编 辑器 22 2.1 设计问题 23 2.2 文档结构 23 2.2.1 递归组合 24 2.2.2 图元 25 2.2.3 组合模式 27 2.3 格式化 27 2.3.1 封装格式化算法 27 2.3.2 ...

    设计模式精解 译者:熊节 程序员必看书籍之一 part2

    本书适用于学习面向中对象设计和设计模式的学生、程序员以及从事软件开发的人士。 本书要点包括: 对象、封装和继承的新观点。 设计模式的思想、起源及其在软件设计学科中的应用。 模式基础以及使用统一建模语言...

    《国外写的,翻译版本》设计模式

    1.8 怎样使用设计模式 20 第2章 实例研究:设计一个文档编 辑器 22 2.1 设计问题 23 2.2 文档结构 23 2.2.1 递归组合 24 2.2.2 图元 25 2.2.3 组合模式 27 2.3 格式化 27 2.3.1 封装格式化算法 27 2.3.2 Compositor...

    《设计模式》中文版(23个设计模式的介绍与运用)

    1.8 怎样使用设计模式 20 第2章 实例研究:设计一个文档编 辑器 22 2.1 设计问题 23 2.2 文档结构 23 2.2.1 递归组合 24 2.2.2 图元 25 2.2.3 组合模式 27 2.3 格式化 27 2.3.1 封装格式化算法 27 2.3.2 Compositor...

    [Java设计模式(第2版)(Design.Patterns.in.Java).John.Metsker

    《java设计模式(第2版)》适合各个层次的java开发人员与设计人员阅读,也可以作为学习java与设计模式的参考读物或教材。 目录: 第1章 绪论 1 第2章 接口型模式介绍 8 第3章 适配器(adapter)模式 13 第4章 外观(facade...

    设计模式 GOF 23

    其次,它为如何引用一组精心设计的模式提供了一个实用方法,以帮助实际开发者针对特定应用问题使用适当的模式进行设计。 目 录 序言 前言 读者指南 第1章 引言 1 1.1 什么是设计模式 2 1.2 Smalltalk MVC中的...

    Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides23种设计模式

    1.8 怎样使用设计模式 20 第2章 实例研究:设计一个文档编 辑器 22 2.1 设计问题 23 2.2 文档结构 23 2.2.1 递归组合 24 2.2.2 图元 25 2.2.3 组合模式 27 2.3 格式化 27 2.3.1 封装格式化算法 27 2.3.2 Compositor...

Global site tag (gtag.js) - Google Analytics