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)
这使得格式化的类负责选择要格式化的数据,格式化程序负责格式的细节.