Updated factory method example.

This commit is contained in:
Ian Dinwoodie
2019-04-27 23:04:13 -04:00
parent 508cf5162b
commit eacfb96f02

View File

@@ -208,6 +208,7 @@ interface and some implementations for it:
class Interviewer class Interviewer
{ {
public: public:
typedef std::shared_ptr<Interviewer> ptr_t;
virtual void askQuestions(void) = 0; virtual void askQuestions(void) = 0;
}; };
@@ -238,12 +239,12 @@ class HiringManager
public: public:
void takeInterview(void) void takeInterview(void)
{ {
interviewer = makeInterviewer(); Interviewer::ptr_t interviewer = makeInterviewer();
interviewer.askQuestions(); interviewer->askQuestions();
} }
protected: protected:
virtual Interviewer makeInterviewer(void) = 0; virtual Interviewer::ptr_t makeInterviewer(void) = 0;
}; };
``` ```
@@ -253,18 +254,18 @@ Now any child can extend it and provide the required interviewer:
class DevelopmentManager : public HiringManager class DevelopmentManager : public HiringManager
{ {
protected: protected:
Interviewer makeInterviewer(void) Interviewer::ptr_t makeInterviewer(void)
{ {
return Developer(); return std::make_shared<Developer>();
} }
}; };
class MarketingManager : public HiringManager class MarketingManager : public HiringManager
{ {
protected: protected:
Interviewer makeInterviewer(void) Interviewer::ptr_t makeInterviewer(void)
{ {
return CommunityExecutive(); return std::make_shared<CommunityExecutive>();
} }
}; };
``` ```
@@ -273,10 +274,10 @@ Here is how this can be used:
```cpp ```cpp
DevelopmentManager developmentManager = DevelopmentManager(); DevelopmentManager developmentManager = DevelopmentManager();
developmentManager.takeInterview(); \\ Output: Asking about design patterns! developmentManager.takeInterview(); // Output: Asking about design patterns!
MarketingManager marketingManager = MarketingManager(); MarketingManager marketingManager = MarketingManager();
marketingManager.takeInterview(); \\ Output: Asking about community building! marketingManager.takeInterview(); // Output: Asking about community building!
``` ```
#### When To Use #### When To Use