java - 共享一些公共(public)处理链的不同处理方法的设计模式

标签 java c++ design-patterns

我有一个与设计模式相关的问题。假设现在我想以不同的方式分析输入数据。我想一个漂亮的想法应该是可以将不同的方法视为不同的类。因为这些方法在处理链方面有一些共同点。例如,每个方法都会先从媒体中读取数据,然后进行某种归一化。分析完成后,应将结果写入文件。因此,当我为不同的处理方法设计类时,我首先为所有方法设计一个基类:

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_datawrite_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/

相关文章:

java - java中分割字符串的算法

c++ - 如何覆盖基类中的构造函数?

c++ - 从通过指针取消引用从 C 函数调用的 C++ 函数中抛出

java - Something-Aware 是一种设计模式吗?

php - 干净的 OO 结构与 SQL 性能

java - 改变纹理的高度使纹理出现在地面之上

java - 使用赋值运算符添加两个方法

java - 如何在 OS X 中使用 Java 找到用户的 'Documents' 文件夹?

java - Android 中的 C++ 与 Java

algorithm - 表示非方形棋盘游戏的数据结构