【发布时间】:2014-01-21 03:18:53
【问题描述】:
我有一个与设计模式有关的问题。假设现在我想以不同的方式分析输入数据。我想一个很好的想法应该是不同的方法可以被视为不同的类。当涉及到处理链时,这些方法有一些共同点。例如,每个方法都会先从媒体中读取数据,然后进行某种规范化。分析完成后,应将结果写入文件。因此,我在为不同的处理方法设计类时,首先为所有方法设计了一个基类:
class Base
{
private:
void read_data();
void normalize_data();
virtual void write_data()=0;
virtual void process_data()=0;
public:
bool run_the_method()
{
read_data();
normalize_data();
process_data();
write_data();
}
}
对于方法类,我应该做的是重新定义虚函数process_data和write_data。现在我唯一关心的是执行每种方法后的分析输出。尽管方法的输入与方法无关,但方法的输出可能不同。对于某些方法,它们的输出是图像;对于某些方法,它们的输出是向量,可以存储在文本文件中。这将影响函数process_data() 以及write_data() 函数中的参数。我能想到的是基于Base类派生出几个类。
class OutputImage:public Base
{
pulbic:
OutputImage():Base();
virtual void write_data() { // writing images to file};
virtual void process_data() = 0;
}
class OutputText:public Base
{
pulbic:
OutputImage():Base();
virtual void write_data() { // writing text to file};
virtual void process_data() = 0;
}
基本思想是根据处理方法的输出格式,所有方法都可以进一步派生自OutputImage类或OutputText类。例如:
class ProcessMethod:public OutputText
{
public:
virtual void process_data()
{
}
}
现在我的问题是:这是一个正确的类设计策略吗?有没有在层次类结构中定义不同处理方法的聪明方法?谢谢。
【问题讨论】:
标签: java c++ design-patterns