设计模式学习笔记(三)—-Strategy策略模式
来源:互联网 发布:网络爬虫用什么语言写 编辑:程序博客网 时间:2024/05/22 06:56
转贴自 http://www.blogjava.net/flustar/archive/2007/11/23/strategy.html
GOF《设计模式》一书对Strategy模式是这样描述的:
定义一系列的算法,把他们一个个封装起来,并且使它们可相互替换。Strategy模式使算法可独立于使用它的客户而变化。
Strategy模式以下列几条原则为基础:
1) 每个对象都是一个具有职责的个体。
2) 这些职责不同的具体实现是通过多态的使用来完成的。
3) 概念上相同的算法具有多个不同的实现,需要进行管理。
下面我将通过一个实例来说明它的具体使用,这个例子是关于数据库连接的。代码如下:
××××××××××××××××××××××××××××××××××××××××××××
//抽象策略角色
interface DatabaseStrategy{
public void process();
}
//具体策略角色
class MysqlDBStrategy implements DatabaseStrategy{
public void process() {
System.out.println("处理Mysql数据库连接");
}
}
//具体策略角色
class OracleDBStrategy implements DatabaseStrategy{
public void process() {
System.out.println("处理Oracle数据库连接");
}
}
//环境角色-包含对抽象策略角色的引用,即DatabaseStrategy
class DataBaseManager{
public void process(DatabaseStrategy dbStrategy){
dbStrategy.process();
}
}
publicclass StrategyClient {
public static void main(String[] args) {
MysqlDBStrategy mysql=new MysqlDBStrategy();
DataBaseManager manager=new DataBaseManager();
manager.process(mysql);
OracleDBStrategy oracle=new OracleDBStrategy();
manager.process(oracle);
}
}
在我们的实际编程中经常会遇到系统要连接的数据库可能不只一种,如果采用传统的方法,即修改连接Url的方法,这种方法确实可行,但是有一个问题要经常修改源代码,不利于以后的维护,那么有没有一种更好的方法呢?答案是有,使用Strategy模式,首先定义一个连接数据库通用的接口(在上面的例子中是DatabaseStrategy),然后再定义实现该接口的具体类(MysqlDBStrategy、OracleDBStrategy),在这些具体类,实现具体的逻辑。最后再定义一个管理数据库连接的类(DataBaseManager),它的内部有一个方法可以接受具体类实例的参数。我们可以看到这个参数是DatabaseStrategy类型的,也就是说它可以接受任何一个实现了DatabaseStrategy接口的类的具体实例(这里运用了对象替换机制,多态的一种),从而完成数据库连接的处理。如果我们还需要处理另外一种数据库如sqlserver,我们只需要建立一个SqlserverDBStrategy类实现DatabaseStrategy接口,把该类的实例传给DatabaseManager的process方法即可。
小结:Strategy模式是一种定义一系列算法的方法。概念上看,这些算法完成的都是相同的工作,只是实现不同。
- 设计模式学习笔记(三)—-Strategy策略模式
- 设计模式学习笔记(三)—Strategy策略模式
- 设计模式学习笔记--策略(Strategy)模式
- 设计模式学习笔记——策略(Strategy)模式
- java 设计模式学习笔记十五 strategy 策略设计模式
- 设计模式学习—Strategy(策略)
- 设计模式学习笔记二十三(Strategy策略模式)
- 设计模式C++学习笔记之一(Strategy策略模式)
- 设计模式学习笔记(六)之策略模式(Strategy)
- 设计模式C++学习笔记之一(Strategy策略模式)
- 设计模式C++学习笔记之一(Strategy策略模式)
- 设计模式C++学习笔记之一(Strategy策略模式)
- 【设计模式】学习笔记1:策略模式(Strategy)
- 设计模式C++学习笔记之一(Strategy策略模式)
- 设计模式C++学习笔记之一(Strategy策略模式)
- 设计模式C++学习笔记之一(Strategy策略模式)
- [学习笔记]Head First 设计模式 - 策略模式(Strategy)
- 设计模式学习笔记(四):策略模式【Strategy】
- 在VC中,系统时间的获取
- 随便写。
- 安下心来
- 帮助你的职业——15件现在就能做的简单事
- 女白领用“心”钓金龟婿,就该挨骂?dambolo
- 设计模式学习笔记(三)—-Strategy策略模式
- myeclipss 智能提示
- 设计模式学习笔记(二)—-Adapter适配器模式
- Sybase ASE中有用的两个小工具(jisql和ribo)
- 设计模式学习笔记(一)--Facade外观模式
- OracleSQL常用(以及经典)语句
- POI操作EXCEL
- C#与Java之比较
- VC常用数据类型