一、概念定义
Strategy模式:是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。Strategy模式使得算法可以在不影响到客户端的情况下发生变化。Strategy模式把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,修改都不会影响到环境和客户端。
二、模式结构图
图1 Strategy模式结构图
三、实用场景
假如现有一组访问Oracle数据库的接口、一组访问Informix数据库的接口、一组访问DB2数据库的接口。请设计和实现一组统一数据库访问的接口(UDBC)。
四、C语言实现
// 结构定义(行为类)
// 回调指针结构体
typedef struct
{
int (*db_open)(void**);
int (*db_rollback)(void*);
int (*db_mquery(const char *, void*);
int (*db_nquery(const char *, void*);
...
}db_cb_ptr_t;
// 各组件接口(各组算法)
1.Oracle访问接口(第一组算法)
int db_ora_open(void **context){...}
int db_ora_rollback(void *context){...}
...
2.Informix访问接口(第二组算法)
int db_ifx_open(void **context){...}
int db_ifx_rollback(void *context){...}
...
3.DB2访问接口(第三组算法)
int db_db2_open(void **context){...}
int db_db2_rollback(void *context){...}
...
// 设置回调函数(维持和查询行为)
// 定义&声明回调对象
db_cb_ptr_t g_db_cb_ptr;
// 数据库初始化
int db_init(db_type_t dbtype)
{
switch(dbtype)
{
case DB_TYPE_ORACLE:
{
// 设置Oracle回调
g_db_cb_ptr.db_open = db_ora_open;
g_db_cb_ptr.db_close = db_ora_close;
g_db_cb_ptr.db_rollback = db_ora_rollback;
g_db_cb_ptr.db_commit = db_ora_commit;
...
break;
}
case DB_TYPE_INFORMIX:
{
// 设置Inofrmix回调
g_db_cb_ptr.db_open = db_ifx_open;
g_db_cb_ptr.db_close = db_ifx_close;
g_db_cb_ptr.db_rollback = db_ifx_rollback;
g_db_cb_ptr.db_commit = db_ifx_commit;
...
break;
}
case DB_TYPE_DB2:
{
// 设置Db2回调
g_db_cb_ptr.db_open = db_db2_open;
g_db_cb_ptr.db_close = db_db2_close;
g_db_cb_ptr.db_rollback = db_db2_rollback;
g_db_cb_ptr.db_commit = db_db2_commit;
...
break;
}
case ...:
{
...
break;
}
}
return 0;
}
// UDBC接口(Strategy接口)// 连接数据库
int db_open(void **context)
{
return g_db_cb_ptr.db_open(context);
}
//断开连接
int db_close(void *context)
{
return g_db_cb_ptr.db_open(context);
}
//事务回滚
int db_rollback(void *context)
{
return g_db_cb_ptr.db_rollback(context);
}
// 事务提交
int db_commit(void *context)
{
return g_db_cb_ptr.db_commit(context);
}
...
// Strategy接口的使用
int main(void)
{
void *context = NULL;
const char *sql = "INSERT INTO test_table VALUES(...)";
db_init(DB_TYPE_ORACLE);
db_open(&context);
db_nquery(sql, context);
db_close(context);
return 0;
}
分享到:
相关推荐
走进设计模式之 策略模式(Strategy) 代码
用Java实现23种设计模式 1. 创建型模式 工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern)...
设计模式精解-GoF 23种设计模式解析附C++实现源码 AbstractFactory模式、Adapater模式、Composite模式、Decorator模式、Factory模式、Observer模式、Strategy模式、Template模式
设计模式C++学习之策略模式(Strategy)
设计模式体现的是一种思想,而思想则是指导行为的一切,理解和掌握了设计模式,并不是说记住了23种(或更多)设计场景和解决策略(实际上这也是很重要的一笔财富),实际接受的是一种思想的熏陶和洗礼,等这种思想...
设计模式精解- GoF 23 种设计模式解析附 C++实现源码 目 录 0 引言 ...........................................................................................................................................
C#面向对象设计模式纵横谈(23):(行为型模式) Strategy 策略模式
我们将以一款奇幻角色扮演游戏(D&D)为蓝本,通过游戏中的模块创建或者功能实现来展示GOF的设计模式。当然,这不是一款真正意义上的游戏,只是为了了解设计模式,所以,我会尽可能的使游戏简单。废话不多说了,我们...
设计模式精解-GoF 23 种设计模式解析附 C++实现源码 目 录 引 言 0.1 设计模式解析(总序) 0.2 设计模式解析后记 0.3 与作者联系 1 创建型模式 1.1 Factory模式 1.2 AbstactFactory模式 1.3 Singleton...
创建模式: 设计模式之Factory 设计模式之Prototype(原型) 设计模式之Builder 设计模式之Singleton(单态) ...设计模式之Strategy(策略) 设计模式之Mediator(中介者) 设计模式之Interpreter(解释器) 设计模式之Visitor
2、爪哇语言抽象工厂创立性模式介绍 3、工厂方法创立性模式介绍 4、单态创立性模式介绍 5、单态创立性模式介绍 6、观察者模式介绍7、责任链模式 8、设计模式之Observer 9、设计模式之Strategy(策略) 10、设计模式之...
C#面向对象设计模式 (行为型模式) Strategy 策略模式 视频讲座下载
1.5 Prototype模式...................................................................................................................23 2 结构型模式........................................................
【Java设计模式】(2)策略模式Strategy
设计模式-策略模式(Strategy)结合Android小知识讲解,简单明了
多 迭代子模式 个对象聚在一起形成的总体称之为聚集, 聚集对象是能够包容一组对象的容器对象。 迭代 子 模式将迭代逻辑封装到一个独立的子对象中, 从而与聚集本身隔开。 迭代子模式简化了聚集 的界面。每一个聚集...
23种模式(Pattern) 1、创建形模式: 1)、单用型:Singleton 2)、工厂方法型:Factory Method 3)、抽象工厂型:Abstract Factory 4)、原型:Prototype 5)、建造型:Builder 2、结构型模式:类与类之间的调用 1...
设计模式精解-GoF 23种设计模式解析附C++实现源码 目 录 0 引言.........................................................................................................................................
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第23节:行为型模式Strategy策略模式
设计模式精解-GoF 23 种设计模式解析附 C++实现源码 目 录 0 引言 ............................................................................................................................................