Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Factory Method
Factory Method
class Musica
{
//las propiedades deben ser privadas.
//propiedades
int anio;
public:
//metodos
Musica()//constructor
{
this->anio = 0;
}
void escuchar()
{
cout << "estoy escuchando" << endl;
}
~Musica() {//destructor
};
};
/*producto*/
class Musica {
public:
virtual void cantar() = 0;//metodo abstracto
};
/*Producto concreto*/
/*
class Rock :public Musica
{
public:
void cantar()
{
cout << "NIRVANA"<<endl;
}
};
/*Producto concreto*/
class Pop :public Musica
{
public:
void cantar()
{
cout << "MICHAEL JACKSON" << endl;
}
};
};
switch (gen)
{
case ROCK:
objetomusica = new Rock();
break;
case POP:
objetomusica = new Pop();
break;
case BALADA:
objetomusica = new Balada();
break;
case INVALIDO:
cout << "no se puede crear" << endl;
break;
default:
objetomusica = NULL;
break;
}
return objetomusica;
}
};
int main()
{
/*Crear un objeto de la clase fabrica*/
FabricadeGeneros* mf = new FabricadeGeneros();
/*Objeto de la clase abstracta musica*/
Musica* musica = mf->getFabricadeGeneros(BALADA);
musica->cantar();
musica= mf->getFabricadeGeneros(ROCK);
musica->cantar();
musica = mf->getFabricadeGeneros(POP);
musica->cantar();