Quote:
Originariamente inviato da Ospitone82
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.
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
}
}
non è niente di che, solo un particolare design.