Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

ClassLoader et Cie

1 réponse
Avatar
Sébastien Boutté
Bonjour,

Actuellement, nous avons un projet qui est organisé de la façon suivante :

- com.toto.common : branche commune
- com.toto.defaultimplementation : classes utilisées par défaut.
- com.toto.implementationxxx : implémentation spécifique

Au runtime, l'implémentation est choisie en fonction d'une propriété
système.
Les classes ayant besoin d'une implémentation spécifique ne sont pas créées
par des new mais
par une factory qui va retourner soit la classes de l'implementationxxx soit
celle de
defaultimplementation suivant qu'elle existe ou non.

Serait il possible de supprimer cette factory et de la remplacer par un
customClassLoader
qui va renvoyer la classe d'implémentation à utiliser (En utilisant un
boostrap et
en redéfinissant la méthode findClass) ?

Merci d'avance,

Sébastien

1 réponse

Avatar
Olivier Pierrier
Salut,

Sébastien Boutté wrote:

Bonjour,

Actuellement, nous avons un projet qui est organisé de la façon suivante :

- com.toto.common : branche commune
- com.toto.defaultimplementation : classes utilisées par défaut.
- com.toto.implementationxxx : implémentation spécifique

Au runtime, l'implémentation est choisie en fonction d'une propriété
système.
Les classes ayant besoin d'une implémentation spécifique ne sont pas créées
par des new mais
par une factory qui va retourner soit la classes de l'implementationxxx soit
celle de
defaultimplementation suivant qu'elle existe ou non.


Ton probleme se resout avec le pattern AbstractFactory.
Elle te retournera La factory specifique qui pourra heriter de la
factory DefaultTotoFactory.

Le code Grosso modo :
public class TotoAbstractFactory
{
TotoFactory getFactory( Param pour determine l'implementation );
}

DefaultTotoFactory implements TotoFactory
{
public Foo createFoo(){}
public Bar createBar(){}
}

MyTotoFactory extends DefaultTotoFactory
{
public Bar createBar(){}
}

De cette facon seule Bar a une implementation particuliere, et dans tous
les cas Foo est de l'implementation par defaut.

En plus pas besion de s'embeter avec un classloader

Olivier