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

小弟我有如下需求,请教该用什么设计模式

2014-01-05 
我有如下需求,请问该用什么设计模式?我有5个数据块,每个数据块前面标有块号。每个块号的对应自己的解析算法

我有如下需求,请问该用什么设计模式?
我有5个数据块,每个数据块前面标有块号。每个块号的对应自己的解析算法。我想用类似多态的方式将任意的数据块传给一个对象的方法,让它去自己寻找解析算法,而不用switch来判断用什么算法。

我看过《设计模式》的“策略模式”,似乎解决不了我的问题。它是把各种算法实现在不同派生类里的,这样我取得块号还得用switch来判断实例化哪个派生类来处理当前数据块。
请高手指点!
[解决办法]
因为你有一个块号,switch是不可少的,只是看写在哪里而以
设计模式的话,用工厂模式,是不错的选择.

[解决办法]
使用工厂方法,把需要创建的类推迟到运行时。
父类提供一个接口来得到块号,同时定义一个创建子类的虚函数(工厂方法),至于不同的解析算法采用虚函数多态即可。

示例代码如下:
class base { //使用者基类
public:
int32_t GetNum();//返回块号。
virtual parser * CreateParser(int32_t num) = 0;//创建解析器,传入块号

        int DoSomething() { //定义处理流程框架
int32_t num = GetNum();//得到块号
parser *TheParser = CreateParser(num);//根据块号创建不同的解释器
TheParser->doparser();//调用解析器处理函数
}
};

class parser { //数据块解析算法基类
public:
virutal int doparse(const char * buff, size_t len);//解析数据块
};

class parser1 : public parser {
public:
virutal int doparse(const char * buff, size_t len) {具体解析算法实现}//解析数据块
};

热点排行