Está en la página 1de 2

#include <iostream>

using namespace std;


enum genero{ ROCK,POP,BALADA,INVALIDO};

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;
}
};

class Balada :public Musica


{
public:
void cantar()
{
cout << "MANZANERO" << endl;
}

};

class FabricadeGeneros//clase fabrica


{
public:
Musica* getFabricadeGeneros(genero gen)//FACTORY METHOD
{
Musica* objetomusica = NULL;

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();

También podría gustarte