4 votes

Modèle de conception pour sauvegarder/charger un objet dans différents formats

J'ai un objet : X, qui peut être enregistré ou chargé dans différents formats : TXT, PDF, HTML, etc.

Quelle est la meilleure façon de gérer cette situation ? Ajouter une paire de méthodes à X pour chaque format, créer une nouvelle classe pour chaque format, ou existe-t-il (comme je le pense) une meilleure solution ?

3voto

uzilan Points 522

Je choisirais le modèle de stratégie. Par exemple :

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);
    }
}

1voto

emesx Points 6951

Je suis d'accord avec @DarthVader , bien qu'en Java il vaudrait mieux écrire

public class XDocument implements IDocument { ...

Vous pouvez également utiliser une classe abstraite, si une grande partie du comportement est commune aux documents, et dans les méthodes communes de la classe de base, appeler une classe abstraite save() qui n'est mise en œuvre que dans les sous-classes.

0voto

DarthVader Points 10955

Je choisirais le modèle Factory. Il semble que vous puissiez utiliser l'héritage et le polymorphisme avec les génériques. Vous pouvez même faire de l'injection de dépendance si vous optez pour une conception similaire à la suivante.

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(){//...}
}

puis dans une autre classe, vous pouvez le faire :

public void SaveDocument(T document) where T : IDocument
{
   document.save();
}

0voto

dbf Points 2822

Cela dépend de vos objets, mais il est possible que le modèle de visiteur (http://en.wikipedia.org/wiki/Visitor\_pattern) soit utilisé ici. Il existe différents visiteurs (PDFVisitor, HHTMLVisitor, etc.) qui savent comment sérialiser les parties de vos objets qu'ils visitent.

0voto

TMN Points 2464

Je suggérerais plutôt le modèle de la stratégie. Vous êtes toujours en train de sauvegarder et de restaurer, la seule différence est la manière dont vous le faites (votre stratégie). Vous avez donc save() et restore() qui s'en remettent à diverses méthodes FormatStrategy des objets que vous pouvez brancher et utiliser au moment de l'exécution.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X