我有一个对象:X,可以以各种格式保存或加载:TXT,PDF,HTML等。
管理这种情况的最佳方法是什么?为每种格式为X添加一对方法,为每种格式创建一个新类,或者存在(我相信)一个更好的解决方案?
答案 0 :(得分:3)
我会选择策略模式。例如:
interface XStartegy {
X load();
void save(X x);
}
class TxtStrategy implements XStartegy {
//...implementation...
}
class PdfStrategy implements XStartegy {
//...implementation...
}
class HtmlStrategy implements XStartegy {
//...implementation...
}
class XContext {
private XStartegy strategy;
public XContext(XStartegy strategy) {
this.strategy = strategy;
}
public X load() {
return strategy.load();
}
public void save(X x) {
strategy.save(x);
}
}
答案 1 :(得分:1)
我同意@DarthVader,虽然在Java中你最好写
public class XDocument implements IDocument { ...
如果文档的行为很常见,也可以使用抽象类,并且在基类的常用方法中调用抽象save()
,它只在子类中实现。
答案 2 :(得分:0)
我会选择Factory模式。看起来你可以将遗传/多态与泛型一起使用。如果你采用类似的设计,你甚至可以进行依赖注入。
public interface IDocument
{
void Save();
}
public class Document : IDocument
{
}
public class PdfDocument: IDocument
{
public void Save(){//...}
}
public class TxtDocument: IDocument
{
public void Save(){//...}
}
public class HtmlDocument : IDocument
{
public void Save(){//...}
}
然后在另一个课程中你可以这样做:
public void SaveDocument(T document) where T : IDocument
{
document.save();
}
答案 3 :(得分:0)
这取决于您的对象,但可以在此处使用访问者模式(http://en.wikipedia.org/wiki/Visitor_pattern)。 有不同的访问者(PDFVisitor,HHTMLVisitor等)知道如何序列化他们访问的对象的部分。
答案 4 :(得分:0)
我会建议战略模式。你总是保存和恢复,唯一的区别是你如何做(你的策略)。因此,您有save()
和restore()
方法可以遵循您可以在运行时插入和播放的各种FormatStrategy
对象。