View Full Version : [JAVA] Cosa sono le classi factory ?
Ospitone82
04-09-2008, 10:23
Ciao a tutti, come da titolo, chi può spiegarmi cosa sono le classi factory e quando si devono utilizzare?
Ciao a tutti, come da titolo, chi può spiegarmi cosa sono le classi factory e quando si devono utilizzare? è un tipo di design che si usa quando vuoi istanziare un oggetto il cui tipo viene deciso in un'altra parte del programma. per esempio, hai una classe astratta di nome AbstractBase da cui ereditano due sottoclassi Subclass1 e Subclass2; in un certo punto del codice sai che vuoi ottenere un oggetto AbstractBase (cioè o Subclass1 o Subclass2), ma non sai se deve essere Subclass1 o 2; usi una factory che ti è stata mandata da qualche altra parte del programma che ha effettuato la decisione.
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
}
}
non è niente di che, solo un particolare design.
volendo puoi anche parametrizzare la costruzione:
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
}
}
Ciao a tutti, come da titolo, chi può spiegarmi cosa sono le classi factory e quando si devono utilizzare?
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.
Ospitone82
04-09-2008, 18:12
Grazie!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.