Wie zum erstellen von Objekten mit Parametern generiert, nach einem eindeutigen Schlüssel
Will ich haben Objekte mit einer Reihe von Eigenschaften und eine einzige eindeutige Identifizierung wichtiger. Als der Schlüssel eindeutig ist, kann es verwendet werden, um herausgreifen einen bestimmten Satz von Eigenschaften. Ich möchte in der Lage sein, um die Schlüssel zu verwenden, wenn das Objekt instanziiert, so dass die Eigenschaften im Zusammenhang mit diesem Schlüssel werden die Attribute für das Objekt.
Eigentum Spezifikation werden regelmäßig (D. H. wenn man Schlüssel hat eine Eigenschaft namens Beschreibung dann, so wird jede andere Taste).
Ein Schlechtes Beispiel
Diesem Beispiel ist, wie ich versucht, zunächst den Ansatz der problem und ist unzureichend. Ich poste es hier zur Veranschaulichung der Probleme mit diesem Ansatz.
Hätte ich einen Food-class, die Namen und die Beschreibung der Attribute. In diesem Fall wird der name sein soll, einen eindeutigen Schlüssel besitzen, in diesem Fall, nur eine Beschreibung.
public class Food {
private String name;
private String description;
public Food(String name, String description) {
this.name = name;
this.description = description;
}
}
Probleme mit diesem Ansatz
Erstens, wenn ich eine bestimmte Art von Essen, sagen wir pizza, die ich eingeben muss, die gleiche Beschreibung, jeder Zeit, sagen Sie "Ein beliebtes italienisches Gericht". Was ich vorziehen würde, ist in der Lage sein, ein Objekt zu erstellen weiß man nur die Namen der Lebensmittel, und haben dann den rest der Attribute ausgefüllt für mich. In anderen Worten, ich sollte in der Lage sein nur pass auf pizza, und das Objekt wird erstellt, mit einer entsprechenden Beschreibung.
Zweitens, das Beispiel hat keine garantierte Einzigartigkeit für das name-Attribut. Ich könnte eine pizza mit einer Beschreibung des "Ein beliebtes italienisches Gericht" und ein anderes mit einer Beschreibung von "Kitschig Güte!" Allerdings möchte ich die Namen eindeutig wählen Sie aus einer Reihe von Attributen. Natürlich ein Attribut gehören könnte mehrere Schlüssel (pizza und pasta könnte beide haben eine Beschreibung von "Ein italienisches Gericht"), aber der Schlüssel kann nur über eine Besondere Beschreibung.
Mögliche Lösungen
Ich mir vorstellen, dass dies erfordert, dass mindestens 2 Dinge:
-
Gewisser Weise der Verknüpfung einen Namen mit einer Reihe von Parametern. Eine HashMap scheint ideal für diese, aber wo wäre ein guter Ort, um es zu speichern? Es scheint sehr seltsam, legte es in das Essen Klasse.
-
Einige Klasse erstellen, die Griffen das Gebäude des Food-Objekte (vielleicht wäre dies ein guter Standort für die obigen HashMap?) Ich habe nach dem Factory-und Builder-Muster, aber das Werk scheint für die Erstellung von verschiedenen Unterklassen und ich möchte in der Lage sein zu speichern 1000s der unterschiedlichen item-Namen (und nicht 1000 verschiedene Unterklassen). Der generator scheint für die Angabe aller Attribute eines Objekts in einen einfacheren Weg, dass die Erinnerung an die Reihenfolge der Parameter im Konstruktor, während auch die Gewährleistung, dass ein Objekt kann nicht auf halbem Weg instanziiert, aber das scheint fast das Gegenteil von dem, was ich Suche.
- Wenn das Essen name nicht ein eindeutiger Bezeichner, wie werden Sie wissen, welche Beschreibung zu verknüpfen, wenn Sie erstellen ein Lebensmittel, indem Sie nur den Namen?
- Meine Entschuldigung, ich meinte das Beispiel was ich derzeit aber mit Problemen, von denen ist der Mangel an Einzigartigkeit. Einzigartigkeit ist etwas, was ich will. Ich werde meinen Beitrag Bearbeiten zu machen, dass klarer.
- verwenden Sie allerdings etwas von Datenbank-oder Persistenz-api? ich meine, wenn Sie möchten, dass Ihre Objekte, um Abfragen in den Beschreibungen automatisch, Sie müssen irgendwo vorhanden sein.
- eigentlich ist dies eine Datenbank-Aufgabe, ABER da willst du etwas Unmögliches machen:
create an object knowing only the name of the food and then have the rest of the attributes filled in for me
kombiniert mitno guaranteed uniqueness for the name
. Sagen, dass ich eine Pizza, wie funktioniert mein code entscheiden, ob er zu nehmen "italienisches Gericht" oder "kitschig"??? Sie entweder das Essen Klasseint id
und dann erstellen Sie Ihre Objekte nur gibt es die id und nicht den Namen, oder Sie generieren eine Menge von Objekten, für jeden Namen, und danach überprüfen, wie viele Elemente es gibt und nutzen Sie alle oder nur die erste ... - Ich will Einzigartigkeit. Aus der Frage:
However, I want the name to uniquely pick out a set of attributes.
d.h. die Tatsache, dass das Beispiel erstellen können 2 Lebensmittel mit dem gleichen Namen, aber unterschiedlichen Beschreibungen ist ein problem, das ich lösen will, nicht ein Ziel ich erreichen will. Sorry für die Verwirrung!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Karte ist eine gute Datenstruktur zum speichern von vordefinierten Parametern. Aber man braucht einen code, der kopiert das Attribut auf das Objekt, d.h. Aufrufe von code wie dem folgenden:
food.setDescription(attrs.get("description"))
Dieser code geschrieben werden kann, in der Fabrik. Factory ist nicht unbedingt erzeugt Instanzen von verschiedenen Klassen. Es kann erstellen Sie Instanzen der gleichen Klasse und initiieren Sie.
Anderer Ansatz ist die Nutzung von Muster -, namens-template-Objekt. Es bedeutet, dass Ihr verschiedene Objekte wie pizza, pasta, Pfahl, Suppe, etc. mit bereits vordefinierten Eigenschaften. Dann wenn Sie benötigen, zu erstellen noch eine weitere pizza, die Sie zuerst erstellen Sie eine Kopie der bereits vorhandenen pizza und dann ändern Sie es, um Ihre spezifischen pizza. Es gibt verschiedene Möglichkeiten, in java zu erstellen, Kopie des vorhandenen Objektes: Kopier-Konstruktor, clone, Serialisierung etc.
Müssen Sie eine Fabrik und einige überladene Konstruktoren.
I want to be able to store 1000s of different item names (and not create 1000s of different subclasses)
nur als kleiner Tipp!Ich bin damit einverstanden, dass die hashmap ist ideal, was ich empfehlen würde, ist eine Art " mapper utility-Klasse, die dauern würde, Ihre Namen und Beschreibungen aus einer xml-Datei oder Datenbank, und fügen Sie Sie dann in der hash-map. Dies wäre, wo Ihr hashmap Leben. Dann können Sie eine Fabrik bauen Ihre Lebensmittel Objekte und Spritzen Sie den Namen und die Beschreibung der Abhängigkeiten aus der hashmap.
Können Sie ein ORM-Frameworks(wie Hibernate) zum anzeigen der Java-Klasse auf eine Datenbank-Tabelle, diese wird kümmern sich um die Verwaltung und Generierung der Primärschlüssel für die Java-Klasse.