J'ai créé la classe d'usine et je me demande quelle est la meilleure façon de l'implémenter. Option 1Quelle est la meilleure façon de créer la classe d'usine
public class Factory {
private IProperty prop;
public IDoc doc;
public Factory(int version) {
switch (version) {
case '1':
prop = new Prop();
doc = new Docu();
...
case '2':
prop = new Prop1();
doc = new Docu1();
...
}
}
public IProperty getProperty() {
return this.prop;
}
public IDoc getDoc() {
return this.doc;
}
}
Ma question est de savoir si le faire comme-à-dire définir membre avec le type d'interface et pour allumer le constructeur ou pour chaque méthode get à utiliser l'instruction switch plutôt sur le constructeur, donc dans la constructeur, je vais simplement obtenir la version et enregistrez-le sur membre de la classe et que, par exemple, utiliser comme
public IProperty getProperty() {
switch (version) {
case '1':
prop = new Prop();
case '2':
prop = new Prop1();
...
Alors, quelle est la meilleure façon, ou toute autre idée?
Votre première version ne sera même pas compilée. Votre commutateur est en dehors de toute méthode. Ce n'est pas autorisé. Et selon votre question, la 2e option est toujours une meilleure façon de procéder. Laissez la méthode 'getProperty' décider de la façon dont elle construit la' propriété'. –
Encore une question, pourquoi votre usine a une référence non statique au lieu de références statiques? –
La première ou la deuxième voie est possible - elles ont une différence mineure. Dans le premier cas, les instances 'IProperty' /' IDoc' renvoyées par la même instance de 'Factory' seront toujours les mêmes, alors que dans le second cas il est toujours possible de changer les instances retournées par l'instance' Factory' pendant sa durée de vie. Bien que la présence de l'instruction 'switch' indique clairement que le polymorphisme peut (et devrait effectivement) être utilisé à la place de celui-ci - veuillez vous référer à la réponse' bobah' qui décrit comment cela est fait. – Yura