|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Aug 2008
Messaggi: 5
|
[JAVA] Cosa sono le classi factory ?
Ciao a tutti, come da titolo, chi può spiegarmi cosa sono le classi factory e quando si devono utilizzare?
|
![]() |
![]() |
![]() |
#2 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7027
|
Quote:
Codice:
abstract class AbstractBase { } final class Subclass1 extends AbstractBase { } final class Subclass2 extends AbstractBase { } abstract class AbstractBaseFactory { public abstract AbstractBase createBase(); } final class Subclass1Factory extends AbstractBaseFactory { @Override public final AbstractBase createBase() { return new Subclass1(); } } final class Subclass2Factory extends AbstractBaseFactory { @Override public final AbstractBase createBase() { return new Subclass2(); } } class User { /** * il metodo createUsingFactory non sa se deve creare una Subclass1 o una Subclass2 */ private AbstractBase createUsingFactory(AbstractBaseFactory factory) { return factory.createBase(); } private void use() { createUsingFactory(new Subclass1Factory()); // questo restituisce una Subclass1 createUsingFactory(new Subclass2Factory()); // questo restituisce una Subclass2 } } |
|
![]() |
![]() |
![]() |
#3 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7027
|
volendo puoi anche parametrizzare la costruzione:
Codice:
abstract class AbstractBase { public AbstractBase(String name) { } } final class Subclass1 extends AbstractBase { @Override public Subclass1(String name) { super(name); } } final class Subclass2 extends AbstractBase { @Override public Subclass2(String name) { super(name); } } abstract class AbstractBaseFactory { public abstract AbstractBase createBase(String name); } final class Subclass1Factory extends AbstractBaseFactory { @Override public final AbstractBase createBase(String name) { return new Subclass1(name); } } final class Subclass2Factory extends AbstractBaseFactory { @Override public final AbstractBase createBase(String name) { return new Subclass2(name); } } class User { /** * il metodo createUsingFactory non sa se deve creare una Subclass1 o una Subclass2, ma in compenso conosce i parametri di costruzione */ private AbstractBase createUsingFactory(AbstractBaseFactory factory) { return factory.createBase("lol"); } private void use() { createUsingFactory(new Subclass1Factory()); // questo restituisce una Subclass1 createUsingFactory(new Subclass2Factory()); // questo restituisce una Subclass2 } } |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jan 2007
Città: Messina
Messaggi: 502
|
Le puoi usare tutte le volte in cui hai progettato una classe della quale non vuoi rendere pubblico il costruttore. Per istanziarla, gli utenti esterni useranno un metodo pubblico di un'altra classe, che sarebbe la factory, che ti restituisce una nuova istanza di quella classe.
|
![]() |
![]() |
![]() |
#5 |
Junior Member
Iscritto dal: Aug 2008
Messaggi: 5
|
Grazie!
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:43.