mirror of
https://github.com/iandinwoodie/cpp-design-patterns-for-humans.git
synced 2025-12-18 13:04:39 +03:00
Updated factory method example.
This commit is contained in:
19
README.md
19
README.md
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user