2016-06-17 13 views
0

Was ist Ihrer Meinung nach besser in Bezug auf eine gute Codierung?Objektorientierte Programmierung: Gibt es eine andere Möglichkeit, Objekte zu erstellen?

Wenn ich ein Objekt erstellen, werde ich neues Schlüsselwort verwenden, um eine Instanz dieser Klasse zu erstellen.

var objA = new A() 

Wenn ich erstellen ein Objekt durch einen statischen Methodennamen createa in einer Klasse zu schaffen und ein Objekt eines erstellen, indem CreateNewA oder CreateInstance anstelle neuer A() aufrufen.

var objA = A.CreateNewA() instead of var objA = new A(). 

Die A.CreateNewA() würde es den Code lesbarer machen. Der Nachteil davon ist, dass ich eine statische Methode namens CreateNewA erstellen muss.

+0

Was Sie beschreiben, ist eine Fabrikmethode. Aber ehrlich: Was lässt Sie denken, dass dies den Code lesbarer macht? Wie Sie bereits gesagt haben, müssen Sie mehr Code schreiben und deshalb müssen Sie mehr Code lesen. Das Nächste ist, dass jedes Objekt eine solche statische Methode zu Ihrer Argumentation haben muss ... – lokusking

+0

Ich denke, dass die statische Methode, die Sie in der Klasse erstellt haben, den Code nicht lesbarer macht, also sind die ersten Optionen besser und Sie können weniger Code schreiben . –

+0

True ... Oh coz Ich habe ein Thrift-Struct, das mit einem Datenobjekt in meinem anderen Code gemappt ist. Wenn ich CreateA für ein Mapping genannt habe, dann weiß ich, wenn ich es lese, dass es keine neue Kopie von Objekt A erzeugt intern erstellt ein Objekt A. Wenn ich CreateNewA nannte, dann wenn ich es lese, es ausdrücklich sagen, ein neues A-Objekt erstellen. – LittleFunny

Antwort

0

Ich denke, dass A.CreateNewA() nicht benötigt wird.

Das Schlüsselwort "new" zum Erstellen einer neuen Instanz ist besser lesbar und leichter zu verstehen.

Mit „neuen“ Schlüsselwort uns auch erlauben, zu Anfangswert Konstruktor Klasse übergeben, zB

const studentA = new Student('firstname', 'lastname') 
+0

Sie können übergeben Sie auch Argumente an die statische Methode, die dann an den Konstruktor übergeben werden. –

+0

@FrankPuffer, ich meine die statische Methode wird nicht benötigt. gerade "neue Klasse (params ..)" macht schon Sinn für alle Entwickler –

0

Wie andere bereits in den Kommentaren erwähnt haben, was Sie in Ihnen Probe zweiten Code zeigen, ist ein gut - bekanntes Designmuster, das "Factory Method" genannt wird.

In Ihrem spezifischen Beispiel hat es keine signifikanten Vorteile gegenüber dem direkten Aufruf des Konstruktors mit new. Sie brauchen noch einen Konstruktor, Sie rufen ihn einfach in der statischen Methode auf und Sie können ihn als privat definieren.

Factory-Methoden sind sinnvoll, wenn Sie nicht wissen, welche Klasse Ihres Objekts zur Kompilierzeit erstellt werden soll. Im Gegensatz zu einem Konstruktor kann die Factory-Methode nicht nur Objekte der Klasse A zurückgeben, sondern auch Objekte einer beliebigen Klasse, die von A abgeleitet sind.

Der Hauptgrund für die Verwendung von Factory-Methoden besteht darin, die Erstellung von Objekten von der restlichen Programmlogik zu trennen, was für die Trennung von Problemen hilfreich ist. Natürlich kostet es das, zusätzlichen Code schreiben (und lesen) zu müssen.

Verwandte Themen