首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

23类设计模式 之 Strategy模式(策略模式)[C语言实现] 1/23

2012-11-23 
23种设计模式 之 Strategy模式(策略模式)[C语言实现] 1/23一、概念定义Strategy模式:是针对一组算法,将每一

23种设计模式 之 Strategy模式(策略模式)[C语言实现] 1/23

一、概念定义

    Strategy模式:是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,修改都不会影响到环境和客户端。

二、模式结构图

23类设计模式 之 Strategy模式(策略模式)[C语言实现] 1/23

图1 Strategy模式结构图

三、实用场景

    假如现有一组访问Oracle数据库的接口、一组访问Informix数据库的接口、一组访问DB2数据库的接口。请设计和实现一组统一数据库访问的接口(UDBC)。

四、C语言实现

4.1 Oracle访问接口

int db_ora_open(void *context){...}int db_ora_rollback(void *context){...}...

4.2 Informix访问接口

int db_ifx_open(void *context){...}int db_ifx_rollback(void *context){...}...

4.3 DB2访问接口

int db_db2_open(void *context){...}int db_db2_rollback(void *context){...}...

4.4 统一访问接口(UDBC)

// 回调指针结构体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;
// 定义&声明回调对象db_cb_ptr_t g_db_cb_ptr;
// 设置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;...
// 设置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;...
// 设置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;...
// 统一数据库接口(UDBC)// 连接数据库int db_open(void *context){    g_db_cb_ptr.db_open(context);}
//断开连接int db_close(void *context){    g_db_cb_ptr.db_open(context);}
//事务回滚int db_rollback(void *context){    g_db_cb_ptr.db_rollback(context);}
// 事务提交int db_commit(void *context){    g_db_cb_ptr.db_commit(context);}...


 

 

 

 

 

 

 

 

热点排行