7
votes

Java étend ou enveloppez une classe pour ajouter des fonctionnalités supplémentaires

Lorsque vous souhaitez ajouter des informations supplémentaires dans une classe, quelle manière préférez-vous: étendriez-vous cette classe ou faire une enveloppe autour de celle-ci?

Dans mon scénario particulier, je veux ajouter des informations de pagination avec un Liste que je reçois de la base de données. Cette information de pagination comprendra: xxx

et un couple de méthodes: xxx

Quelle est votre opinion, étendre ou envelopper?


0 commentaires

6 Réponses :


3
votes

Trop étendre est diabolique et rendra votre code difficile à lire / à comprendre Go avec la composition, créez simplement une nouvelle classe qui possède une collection et vos membres supplémentaires nécessaires à la pagination.


0 commentaires

1
votes

Je préfère envelopper dans la mesure du possible. Surtout dans votre liste - La classe wrapper peut contenir n'importe quel type de liste, alors qu'une classe étendue est liée à une superclasse en béton spécifique.


0 commentaires

9
votes

On dirait que vous demandez si vous devriez privilégier l'héritage ou la composition dans votre situation. Je dirais que vous ne créez pas une nouvelle implémentation de la liste et que vous ne vous souciez pas vraiment de la mise en œuvre de la liste , de sorte que l'héritage ne correspond pas à votre problème. Au lieu de cela, vous fournissez des fonctionnalités de pagination. Je créerais une classe qui enveloppe génériquement (encapsulate) la logique de pagination à l'aide de list ou une autre collection générique.


0 commentaires

4
votes
  • Dans votre cas Wrap de la liste existante et crée votre implémentation de classe Liste elle-même, déléguant toutes les méthodes La liste d'origine (qui est transmise dans le constructeur, par exemple) < / li>
  • L'héritage n'est pas toujours tort, mais dans ce cas, vous ne saurez pas quelle classe à étendre - sera-t-il ArrayList ou LinkedList ?

0 commentaires

0
votes

Même si vous étendez, vous ne pourrez pas appeler les nouvelles méthodes via la référence de super classe. Il est préférable de simplement l'envelopper.


0 commentaires

0
votes

Avoir une élégante pagichelist (liste d'extension) est une approche adéquate.

  • Pourquoi déléguer quand vous pouvez hériter des choses dont vous avez besoin?

  • C'est comme la relation entre la filereader et la bufferedfilerreader (et personne ne dirait que c'est une mauvaise pratique).


0 commentaires