J'essaie de comprendre comment concevoir la hiérarchie des classes pour une classe Carrier que j'implémente. J'ai actuellement une classe de base abstraite Carrier.Conception d'une hiérarchie de classes sans héritage multiple en Java
J'ai une autre classe abstraite TimedCarrier (TC) qui étend Carrier avec des informations temporelles et liées au domaine. Les classes de béton s'étendent de Carrier et TimedCarrier. L'utilisateur a besoin d'un moniteur de progression, donc je crée une classe abstraite MonitoredCarrier (MC) qui s'étend de Carrier. Les classes de béton s'étendent de Monitored Carrier.
Cela fonctionne bien pendant un certain temps jusqu'à ce que les besoins des utilisateurs changent. Maintenant, j'ai besoin d'un MonitoredTimedCarrier. Je ne peux évidemment pas sous-classer TC et MC. Je pense à la mise en œuvre MC comme interface:
class TimedCarrier implements IMonitored
class Carrier implements IMonitored
(depuis plus de sens pour moi dans le cadre de ce domaine, je devrais être en mesure de surveiller Carriers si oui ou non ils sont chronométrés), mais MC est une classe richement implémentée, et je vais devoir copier-coller toutes les méthodes dans des classes qui s'étendaient depuis MC. Je ne veux pas dupliquer le code.
Comment puis-je résoudre ce problème? Merci.
[Modifier]
TimedCarrier étend porteuse avec un groupe de variables membres et les méthodes de lecture/définition. MonitoredCarrier étend Carrier avec des variables membres, des méthodes getter/setter et un tas de méthodes qui fonctionnent avec le moniteur.
class TimedCarrier extends Carrier {
int var1..
int var2..
public void setVar1(int var1) {...}
public int getVar1() {...}
....
}
class MonitoredCarrier extends Carrier {
int var1..
int var2..
public void setVar1(int var1) {...}
public int getVar1() {...}
....
public void monitorSomething() {...}
public void monitorOtherSomething() {...}
}
Je suis d'accord. Dans de nombreux cas, la composition l'emporte sur l'héritage. – gpampara