2016-06-17 2 views
0

Selon vous, quel est le meilleur codage?Programmation orientée objet: existe-t-il un autre moyen de créer des objets?

Lorsque je crée un objet, j'utiliserai un nouveau mot-clé pour créer une instance de cette classe.

var objA = new A() 

Si je crée un objet en créant un createa nom de la méthode statique dans une classe et créer un objet de A en appelant CreateNewA ou CreateInstance au lieu de nouveau A(). A.CreateNewA() rendrait le code plus lisible. L'inconvénient de ceci est que je dois créer une méthode statique appelée CreateNewA.

+0

Ce que vous décrivez est une méthode d'usine. Mais honnêtement: Qu'est-ce qui vous fait penser que cela rendra le code plus lisible? Comme vous l'avez déjà dit, vous devez écrire plus de code et donc vous devez lire plus de code. La prochaine chose est, chaque objet doit avoir une telle méthode statique concernant votre argumentation ... – lokusking

+0

Je pense que la méthode statique que vous avez créée en classe ne rendra pas le code plus lisible, ainsi les premières options sont meilleures et vous pouvez écrire moins de code . –

+0

True ... Oh coz J'ai un Thrift Struct qui mappé avec un objet de données dans mon autre code, donc si j'ai nommé CreateA pour faire un mapping alors quand je le lis je saurai qu'il ne crée pas une nouvelle copie de l'objet A en interne crée un objet A. Si j'ai nommé CreateNewA alors quand je l'ai lu, il dit explicitement en créant un nouvel objet. – LittleFunny

Répondre

0

Je pense que A.CreateNewA() n'est pas nécessaire. L'utilisation du mot-clé "new" pour créer une nouvelle instance est plus lisible et plus facile à comprendre.

L'utilisation de « nouveau » mot-clé nous permettent également de passer la valeur initiale à la classe constructeur aussi, par exemple,

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

Vous pouvez passez également des arguments à la méthode statique qui sont ensuite passés au constructeur. –

+0

@FrankPuffer, je veux dire que la méthode statique n'est pas nécessaire. juste "new Class (params ..)" a déjà du sens pour tous les développeurs –

0

Comme d'autres l'ont déjà dit dans les commentaires, ce que vous montrez en vous deuxième exemple de code est un puits modèle de conception connu appelé "méthode d'usine".

Dans votre exemple spécifique, il n'a aucun avantage significatif par rapport à l'appel direct du constructeur avec new. Vous avez toujours besoin d'un constructeur, vous l'appelez simplement dans la méthode statique et vous pouvez le rendre privé.

Les méthodes d'usine ont un sens si vous ne connaissez pas la classe de votre objet à créer au moment de la compilation. Contrairement à un constructeur, la méthode factory peut non seulement renvoyer des objets de la classe A mais aussi des objets de n'importe quelle classe dérivée de A. La principale raison de l'utilisation des méthodes d'usine est de séparer la création d'objet du reste de la logique du programme, ce qui est utile pour la séparation des préoccupations. Bien sûr, cela revient à devoir écrire (et lire) du code supplémentaire.