`
java虫
  • 浏览: 535742 次
  • 性别: 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)

    这种设计模式鼓励了代码复用,避免了使用多重条件语句,并使系统更加灵活,易于扩展。 策略模式的核心组件包括: 1. **策略接口(Strategy Interface)**:定义了所有支持的算法的公共接口。这样,所有策略类必须...

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

    在“一个strategy模式的例子.rar_strategy_设计模式”这个压缩包中,包含了两个关键文件,一个是“www.pudn.com.txt”,可能是相关资料链接或介绍,另一个是“strategy”,可能是一个具体的策略模式实现代码。...

    Strategy 模式 JAVA

    **策略模式(Strategy Pattern)**是面向对象设计模式中的一种行为模式,它允许在运行时改变对象的行为。在Java编程中,策略模式被广泛应用于处理算法的可互换性问题,使得程序能够根据不同的环境或者需求选择合适的...

    设计模式之_Strategy_00_源码与文档.rar

    这个压缩包文件“设计模式之_Strategy_00_源码与文档.rar”包含了关于Strategy模式的源码实现和相关文档,便于深入理解和学习。 Strategy模式的核心思想是定义一系列算法,并将每一个算法封装起来,使它们可以相互...

    strategy策略模式源码

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。...在提供的压缩包文件"strategy"中,可能包含了关于策略模式的示例代码或者详细解释,你可以解压后查看,进一步理解和学习策略模式的实现和应用。

    java的Strategy模式设计应用--小型电子商务系统简单模拟

    在软件设计领域,Strategy模式是一种行为设计模式,它使你能在运行时改变对象的行为。Java作为面向对象编程语言,提供了丰富的特性支持这一模式的应用。在这个小型电子商务系统简单模拟项目中,我们利用Strategy模式...

    JAVA_Strategy.rar_java 策略模式、工厂模式、桥接模式_severalgdo_strategy

    在"JAVA_Strategy.rar"这个压缩包中,severalgdo_strategy可能包含了一些示例代码或者教程,用于演示如何在Java项目中实施策略模式、工厂模式和桥接模式。解压并学习这些资源,可以帮助你深入理解这些模式的实现细节...

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

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

    [行为模式] head first 设计模式之策略模式(strategy)

    策略模式通常由三部分组成:上下文(Context)、策略接口(Strategy)和具体策略类(Concrete Strategy)。上下文是使用策略的对象,它定义了与策略交互的接口,而策略接口定义了策略的公共操作。具体策略类实现了...

    设计模式培训-strategy

    ### 设计模式培训-strategy #### 一、设计模式概览 设计模式是软件工程领域的一个重要概念,它提供了一套解决常见问题的有效方法。在软件开发的过程中,开发者经常会遇到相似的问题,这些问题往往有着类似的解决...

    c#开发模式-面向对象

    3. **算法的复用**:如果多个类需要使用同一组算法,但这些算法又不是这些类的核心职责,则可以考虑使用Strategy模式将这些算法封装起来,供多个类共享使用。 #### 五、Strategy模式的结构 - **Strategy**:定义了...

    设计模式学习笔记总结

    这里我们聚焦于C#语言中的设计模式学习笔记,涵盖了多种经典的设计模式,如合成模式、桥梁模式、装饰模式、享元模式、门面模式、命令模式、工厂方法、策略模式、代理模式以及状态模式。下面将对这些模式逐一进行详细...

    24种设计模式以及混合设计模式

    如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、命令模式(Command)、迭代器模式(Iterator)、访问者模式(Visitor)、备忘录模式(Memento)、状态模式(State)、职责链...

    设计模式之美—学习笔记

    策略模式(Strategy)定义了一系列算法,并将每个算法封装起来,使它们可以互相替换,让算法独立于使用它的客户。模板方法模式(Template Method)定义了操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以...

    设计模式学习使用的简单Demo

    本资源“设计模式学习使用的简单Demo”提供了一系列的示例代码,旨在帮助开发者更好地理解和应用这些模式。以下是对其中包含的设计模式及其Java反射机制的详细说明: 1. **适配器模式**(Adapter Pattern):适配器...

    HeadFirst 设计模式学习笔记1--策略模式Demo

    《HeadFirst设计模式学习笔记1--策略模式Demo》 在软件工程中,设计模式是一种解决常见问题的标准方案,它提供了一种在特定情况下组织代码的模板。策略模式是设计模式中的一种行为模式,它允许在运行时选择算法或...

    java设计模式中英文各种版本打包下载 学习设计模式必备材料

    3. 行为型模式(Behavioral Patterns):如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代器模式(Iterator)、责任链模式(Chain of Responsibility)、命令模式(Command...

    设计模式学习系列2设计模式影印版

    行为型模式则关注对象之间的职责分配,如策略模式(Strategy)、观察者模式(Observer)等。 设计模式的学习不仅仅是了解这些模式的定义和示例,更重要的是理解其背后的原理和应用场景,以及如何在实际项目中灵活...

    strategy-demo.zip

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件工程中,当一个系统需要在不同时间执行不同的...如果你想要学习或加深对策略模式的理解,解压这个文件并查看示例代码将会是一个很好的实践方式。

Global site tag (gtag.js) - Google Analytics