多种输出格式的设计模式

Dan*_*Dan 6 c++ oop encapsulation file-format design-patterns

我有一个类结构,它表示(内部)我希望输出到文件的数据.

一些成员变量对数据类是私有的,因此它可以自我管理并阻止出错.

然后我希望将这些数据输出为多种文件格式.我可以做点什么

savefile_formatA(DataClass* pDataClass, ofstream& fout);
savefile_formatB(DataClass* pDataClass, ofstream& fout);
Run Code Online (Sandbox Code Playgroud)

除了函数需要再看到私有成员变量DataClass.我当然可以savefile_formatXYZ()做朋友的功能但是我需要为每种不同的格式添加一个朋友声明.

是否有解决此类问题的标准设计模式?你会如何解决这个问题?

谢谢!

djn*_*jna 10

根据数据类的复杂程度,您可能希望使用访问者模式.如果您有某种嵌套数据结构,那么访客可能就是您所需要的.

如果格式化是相对简单的,例如,您正在生成诸如逗号分隔列表之类的变体,那么您可以采用这样的方法.

您的格式化程序对象都实现了一个接口,如(伪代码)

 IFormatter ( start(); addInt(name, value), addString(name, value) .... end() );
Run Code Online (Sandbox Code Playgroud)

那么数据类有一个方法

  public void formatMyself( IFormatter formatter ) {

        formatter.start()
        formatter.addString("aField", myA);
        formatter.addInteger("bfield", myB);
        formatter.end();          
  }
Run Code Online (Sandbox Code Playgroud)

这使得格式化的类负责选择要格式化的数据,格式化程序负责格式的细节.

  • 为[访客模式] +1(http://en.wikipedia.org/wiki/Visitor_pattern) (2认同)