Files
cpp-design-patterns-for-humans/examples/creational/factory_method.cpp
Ian Dinwoodie 092d1a21f9 Rolling back use of typedef with smart pointers.
This is to reduce the obfuscation of the code.
2019-05-14 19:19:26 -04:00

69 lines
1.3 KiB
C++

#include <iostream>
#include <memory>
class Interviewer
{
public:
virtual void askQuestions(void) = 0;
};
class Developer : public Interviewer
{
public:
void askQuestions(void)
{
std::cout << "Asking about design patterns!" << std::endl;
}
};
class CommunityExecutive : public Interviewer
{
public:
void askQuestions(void)
{
std::cout << "Asking about community building!" << std::endl;
}
};
class HiringManager
{
public:
void takeInterview(void)
{
std::shared_ptr<Interviewer> interviewer = makeInterviewer();
interviewer->askQuestions();
}
protected:
virtual std::shared_ptr<Interviewer> makeInterviewer(void) = 0;
};
class DevelopmentManager : public HiringManager
{
protected:
std::shared_ptr<Interviewer> makeInterviewer(void)
{
return std::make_shared<Developer>();
}
};
class MarketingManager : public HiringManager
{
protected:
std::shared_ptr<Interviewer> makeInterviewer(void)
{
return std::make_shared<CommunityExecutive>();
}
};
int main()
{
DevelopmentManager developmentManager = DevelopmentManager();
developmentManager.takeInterview(); // Output: Asking about design patterns!
MarketingManager marketingManager = MarketingManager();
marketingManager.takeInterview(); // Output: Asking about community building!
return 0;
}