diff options
Diffstat (limited to 'graphs/cpp/chain_of_responsibility')
| -rw-r--r-- | graphs/cpp/chain_of_responsibility/director.cc | 10 | ||||
| -rw-r--r-- | graphs/cpp/chain_of_responsibility/handler.cc | 19 | ||||
| -rw-r--r-- | graphs/cpp/chain_of_responsibility/president.cc | 10 | ||||
| -rw-r--r-- | graphs/cpp/chain_of_responsibility/vice_president.cc | 10 |
4 files changed, 49 insertions, 0 deletions
diff --git a/graphs/cpp/chain_of_responsibility/director.cc b/graphs/cpp/chain_of_responsibility/director.cc new file mode 100644 index 0000000..af4072f --- /dev/null +++ b/graphs/cpp/chain_of_responsibility/director.cc @@ -0,0 +1,10 @@ +#include "director.hh" + +#include <iostream> +void Director::handle_request(int level) +{ + if (level <= 3) + std::cout << "Director handles\n"; + else + forward_request(level); +}
\ No newline at end of file diff --git a/graphs/cpp/chain_of_responsibility/handler.cc b/graphs/cpp/chain_of_responsibility/handler.cc new file mode 100644 index 0000000..256933b --- /dev/null +++ b/graphs/cpp/chain_of_responsibility/handler.cc @@ -0,0 +1,19 @@ +#include "handler.hh" + +#include <iostream> +Handler::Handler(Handler* next) + : next_{ next } +{} +void Handler::set_successor(Handler* h) +{ + next_ = h; +} +void Handler::forward_request(int level) +{ + if (next_ == nullptr) + { + std::cout << "Nobody can handle this request\n"; + } + else + next_->handle_request(level); +}
\ No newline at end of file diff --git a/graphs/cpp/chain_of_responsibility/president.cc b/graphs/cpp/chain_of_responsibility/president.cc new file mode 100644 index 0000000..9ee0566 --- /dev/null +++ b/graphs/cpp/chain_of_responsibility/president.cc @@ -0,0 +1,10 @@ +#include "president.hh" + +#include <iostream> +void President::handle_request(int level) +{ + if (level <= 9) + std::cout << "President handles\n"; + else + forward_request(level); +}
\ No newline at end of file diff --git a/graphs/cpp/chain_of_responsibility/vice_president.cc b/graphs/cpp/chain_of_responsibility/vice_president.cc new file mode 100644 index 0000000..0316d63 --- /dev/null +++ b/graphs/cpp/chain_of_responsibility/vice_president.cc @@ -0,0 +1,10 @@ +#include "vice_president.hh" + +#include <iostream> +void VicePresident::handle_request(int level) +{ + if (level <= 6) + std::cout << "VicePresident handles\n"; + else + forward_request(level); +}
\ No newline at end of file |
