#pragma once #include "Pilha.h" #include "PilhaLE.h" // Factory class for IPilha Implementations enum PilhaID { PILHA_VETOR, PILHA_LE }; class PilhaFactory { public: static IPilha* getPilha(PilhaID id, int size=10); protected: virtual IPilha* makePilha(PilhaID id); virtual IPilha* makePilha(PilhaID id, int size); private: static IPilha *pilha_; }; IPilha* PilhaFactory::getPilha(PilhaID id, int size=10) { if( pilha_ == 0) { if ( id == PILHA_VETOR ) { pilha_ = makePilha(id, size); } else if ( id == PILHA_LE ) { pilha_ = makePilha(id); } } return pilha_; } IPilha* PilhaFactory::makePilha(PilhaID id, int size){ { return new Pilha(size); } IPilha* PilhaFactory::makePilha(PilhaID id){ { return new PilhaLE(); }