2012-03-26 17 views
3

So habe ich eine allgemeine Frage. Sagen wir, ich möchte Auto-Objekte in diesem Programm erstellen, das ich schreibe, und ich muss Hunderte von diesem Auto-Objekt erstellen. Ist es besser, eine abstrakte Auto-Klasse zu erstellen und sie zu erweitern, wenn ich mein Auto-Objekt mache (zB Toyota, Nissan, etc.) oder könnte ich eine Reihe von statischen Klassen verwenden, die die Details des spezifischen Objekts enthalten und in einem allgemeinen verwenden Auto-Objekt, um den Toyota oder Nissan zu machen? Ich denke, die die abstrakte Methode ziemlich selbsterklärend sein sollten, aber hier ist ein Beispiel für die zweite Methode:Verwenden Sie statische Klasse oder abstrakte Klasse für die Objekterstellung

public class CarNames { 

public static String getCarName(int pCarIndex){ 

    switch (pCarIndex) { 
    case 0:   
     return "Toyota"; 
    default: 
     throw new Error("pCarIndex does not exist!"); 
    } 
} 

} 

, die in dieser Klasse verwendet wird, um das Objekt zu erstellen:

public class Car{ 

    private int mCar_ID;//This indicates which Car to load 
    private String mCarName; 

public Car(int pCar_ID){ 
    mCar_ID = pCar_ID; 
      mCarName = CarNames.getCarName(pCar_ID); 
      //Do Stuff with collected parameters 
} 

} 

Lassen Sie mich wissen, wenn etwas keinen Sinn ergibt. Vielen Dank.

EDIT: Die Autos können verschiedene Parameter wie Größe, Motor usw. haben. Der Grund, warum ich eine abstrakte Klasse wählte, ist, weil ich denke, dass es mehr Flexibilität als eine Schnittstelle bietet, da ich Methoden auf der ganzen Linie hinzufügen könnte.

+2

Ist die einzige Sache, die zwischen jeder Art von Auto der Name unterscheidet? Oder werden sie ihre eigenen Methoden haben? – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

+0

In dem von Ihnen geposteten Code können Sie [enums] (http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html) anstelle von Ints verwenden. – assylias

+0

Du sprichst also die statischen Klassen komplett aus und gehst direkt zu enums? Ich muss das auffrischen. – eBehbahani

Antwort

3

Ist es besser, eine abstrakte Klasse des Autos zu erstellen und sie zu erweitern, wenn ich mein Autoobjekt mache (zB Toyota, Nissan usw.) oder könnte ich eine Reihe von statischen Klassen verwenden, die die Details des spezifischen Objekts enthalten und verwenden Sie das in einem allgemeinen Autoobjekt, um den Toyota oder Nissan zu machen?

Weder. Sie haben genau eine Car Klasse und eine Datei (z. B. Datenbank), die die Details eines bestimmten Fahrzeugs enthält. Sie erstellen dann Instanzen dieser einen Car Klasse basierend auf dem Dateiinhalt.

Die Autos können verschiedene Parameter wie Größe, Motor usw.

Programmierer für das letzte halbe Jahrhundert haben dies als „Daten“ bezeichnet. Je weniger Daten Sie in Ihren Quellcode einbetten, desto besser.

+0

Ok, ich denke ich verstehe was du sagst. Ich habe allerdings eine Frage. Würde es nicht länger dauern, Daten aus einer Datei zu lesen, oder kommt der Performance-Hit nur beim Schreiben in Dateien? Danke – eBehbahani

+0

@rioneye: "Würde es nicht länger dauern, um Daten aus einer Datei zu lesen" - die meisten Programme kommen in Form von Dateien, und dies seit der Ersetzung der Lochkarten. Was bringt Sie auf den Gedanken, dass das Lesen einer Datei (eines Programms) wesentlich schneller ist als das Lesen einer Datei (Datenbank)? Dies gilt insbesondere für Datenbanken, in denen Sie möglicherweise nicht alle Daten einlesen müssen, wenn Sie nicht mit allen Autos gleichzeitig arbeiten. – CommonsWare

+0

Ok, aber ich habe noch eine Frage. Die Datei, sagen wir mal XML, wäre nur nützlich, wenn alle Parameter Strings, Bools, etc wären, oder? Angenommen, die Engine ist ein Objekt mit Methoden, die die Beschleunigung usw. steuern. Wie kann ich dieses Objekt in einer Datei speichern? – eBehbahani

1

Ich werde einen Stich bei diesem ... Ich bin mir nicht sicher, ob Ihr Ziel am Ende Wartungsfreundlichkeit oder Speicher ist oder ... Ich werde vermuten, dass dies eine Android-Frage Ihr Anliegen ist ist mit der Erinnerung. Vor allem, wenn Sie über 100 Objekte sprechen.

Mein erster Gedanke der flyweight pattern es wird diesen Objekten erlauben, Speicher zu teilen und kleinere Fußabdrücke zu haben. Aber ich bin mit der @CommonsWare Antwort ... Teil dessen, worüber du sprichst, sind Daten. Wenn ich Ihre Frage verstehe, ist Ihr Plan, alle verschiedenen Teile Ihres Autos in Code basierend auf der CardId zu definieren, die nicht sehr effizient klingt. Das klingt nach Daten, egal ob es sich um XML- oder SQLLite-Datenbanken handelt.

Sie könnten über Nissans sprechen, die als ein Typ (Klasse) enden könnte, die das abstrakte Klassenauto erweitert, aber die Motorgröße, Höhe, Breite und Benzinverbrauch sind alle Daten.

+0

Danke. Es scheint, dass ich mehr über xmls in android recherchieren muss. – eBehbahani

Verwandte Themen