我有一个与设计模式相关的问题。假设现在我想以不同的方式分析输入数据。我想一个漂亮的想法应该是可以将不同的方法视为不同的类。因为这些方法在处理链方面有一些共同点。例如,每个方法都会先从媒体中读取数据,然后进行某种归一化。分析完成后,应将结果写入文件。因此,当我为不同的处理方法设计类时,我首先为所有方法设计一个基类:
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
。现在我唯一关心的是执行每种方法后的分析输出。尽管无论哪种方法,方法的输入都是相同的,但方法的输出可能不同。对于某些方法,它们的输出是图像;对于某些方法,它们的输出是 vector ,可以存储在文本文件中。这将影响函数 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()
{
}
}
现在我的问题是:这是正确的类设计策略吗?有没有在层次类结构中定义不同处理方法的聪明方法?谢谢。
最佳答案
您可以考虑创建单独的接口(interface) Reader、Normalizer、Processor 和 Writer。特别是对于可测试性,这将允许您模拟读写(假设您在内存中创建一些数据而不是用于单元测试)。创建一个 director 或 workflow 类,将这些单独的组件放在一起使用。
关于java - 共享一些公共(public)处理链的不同处理方法的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21241020/