2016-11-16 3 views
1

Ich bin neu mit Design-Muster, und ich weiß nicht, welche ich in diesem Fall anwenden muss. Ich habe einige Daten in einer Datei, also muss ich diese Daten modellieren und dann eine Klasse mit diesen Daten starten.Klasse mit anderen Methode und Objekt Design-Muster

Für das Lesen der Datei und der Modellierung wähle ich das Dao-Muster, also gibt es Schnittstelle (Schnittstelle) und seine Implementierung (InterfaceImplementation), die die Datei lesen und die Modelldaten (DataModel) zurückgeben. Nachdem ich eine andere Klasse (Runner) mit diesen Modelldaten instanziieren muss, rufe ich eine seiner Methoden auf. Dies ist, was ich getan habe:

public class Factory { 
    public void start() { 
     Interface dao = new InterfaceImplementation(); 
     DataModel data = dao.getDataModel(); 
     Runner runner = new Runner(data); 
     runner.run(); 
    } 
} 

So ist der Client Aufruf nur die Methode new Factory().start().

Ich habe einige Zweifel an dieser Lösung, ich denke nicht, dass dies eine gute Lösung und eine gute Anwendung der Factory-Muster ist.

Ich hoffe, sauber gewesen zu sein, Prost.

Antwort

0
public class Factory { 
    public void start() { 
     Interface dao = new InterfaceImplementation(); 
     DataModel data = dao.getDataModel(); 
     Runner runner = new Runner(data); 
     runner.run(); 
    } 
} 

2 Bemerkungen:

  • Eine Fabrik ein Objekt erstellt und stellt allgemein ein Beispiel dafür. Eine Fabrik in Ihrem Code sieht wie folgt aus:

    DataModel data = dao.getDataModel();

  • Warum wieder instanziieren InterfaceImplementation bei jedem Anruf start()?

Wenn Sie mehr DataModel s haben, ein nützliches Werk könnte mit gutem Beispiel erstellen/abrufen eine bestimmtes DataModel für die Kunden.

public class DataModelFactory { 

     private Interface dao = new InterfaceImplementation(); 

     public DataModel GetDataModelXXX() { 
     DataModel dataModel = dao.getDataModelXXX(); 
     return dataModel ; 
     } 

     public DataModel GetDataModelYYY() { 
     DataModel dataModel = dao.getDataModelYYY(); 
     return dataModel ; 
     } 
} 
0

Eine Fabrik soll die Erstellung eines Objekts erleichtern. In einer Fabrik nach der Erstellung wird das Objekt zurückgegeben.

Also erstellen Sie den Runner und geben Sie es an den Anrufer zurück. Dort können Sie entscheiden, was Sie damit machen wollen.

Es ist auch wichtig, der Methode sinnvolle Namen zu geben.

1

Ihre Factory Klasse ist eigentlich keine Implementierung der Factory Schöpfung. Es ist eine Implementierung des Facade Musters.

Ihre Factory Zweck der Klasse ist nicht nur die Instantiierung Prozess eines Runner, zu vereinfachen, sondern den gesamten Prozess zur Herstellung eines Runner beginnen, die als eine Fabrik macht es zu vereinfachen.

Nebenbei bemerkt, die Benennung von Dingen ist einer der wichtigsten Aspekte bei der Programmierung. Wählen Sie sinnvolle Namen der Ubiquitous Language Ihrer Domain.

0

Die Sache, die meine Aufmerksamkeit erregt hat: In Ihrer aktuellen Implementierung ist Ihr Client "irgendwie" von allen anderen Aktivitäten vollständig entkoppelt. Aber nicht positiv.

Ihr Client-Code ruft start() auf; und dann intern, eine Menge Dinge passieren. Aber es gibt nicht einmal einen Rückgabewert von dieser Methode.

Ich frage mich jetzt: Wie wirkt sich das auf Ihr System aus? Gibt es einige implizite Nebenwirkungen? So, dass Runner irgendwo einen Global State Singleton aktualisiert?

Mit anderen Worten: Was wäre bei gegebenem Code, wenn start() mehrfach aufgerufen wird ?! Oder ... null mal ?!

In diesem Sinne ist mir überhaupt nicht klar, wie sich dieser Code auf etwas anderes "bezieht". Und gut, das sieht für mich nach einem Problem aus, in das man schauen sollte.

(und ja, ich verstehe, dass meine Eingabe mehr von einem „Code/Design Review“ ist als eine richtige Antwort, aber was soll, vielleicht kann es hilfreich sein)