设计模式以各种格式保存/加载对象

时间:2011-12-05 17:45:11

标签: oop design-patterns

我有一个对象:X,可以以各种格式保存或加载:TXT,PDF,HTML等。

管理这种情况的最佳方法是什么?为每种格式为X添加一对方法,为每种格式创建一个新类,或者存在(我相信)一个更好的解决方案?

5 个答案:

答案 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对象。