From 75383841df370fab1210bb57a48b4fde64901242 Mon Sep 17 00:00:00 2001 From: Ian Dinwoodie Date: Sat, 27 Apr 2019 23:04:29 -0400 Subject: [PATCH] Added factory method example source code. --- examples/creational/factory_method.cpp | 69 ++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 examples/creational/factory_method.cpp diff --git a/examples/creational/factory_method.cpp b/examples/creational/factory_method.cpp new file mode 100644 index 0000000..4057dcc --- /dev/null +++ b/examples/creational/factory_method.cpp @@ -0,0 +1,69 @@ +#include +#include + +class Interviewer +{ + public: + typedef std::shared_ptr ptr_t; + 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) + { + Interviewer::ptr_t interviewer = makeInterviewer(); + interviewer->askQuestions(); + } + + protected: + virtual Interviewer::ptr_t makeInterviewer(void) = 0; +}; + +class DevelopmentManager : public HiringManager +{ + protected: + Interviewer::ptr_t makeInterviewer(void) + { + return std::make_shared(); + } +}; + +class MarketingManager : public HiringManager +{ + protected: + Interviewer::ptr_t makeInterviewer(void) + { + return std::make_shared(); + } +}; + +int main() +{ + DevelopmentManager developmentManager = DevelopmentManager(); + developmentManager.takeInterview(); // Output: Asking about design patterns! + + MarketingManager marketingManager = MarketingManager(); + marketingManager.takeInterview(); // Output: Asking about community building! + + return 0; +}