#include
#include
class Strategy {
public:
virtual void show() = 0;
};
class Context {
public:
void setStrategy(std::shared_ptr s) { s_ = s; }
void show() {
std::cout << "In Context show()." << std::endl;
if(s_) { s_->show(); }
}
private:
std::shared_ptr s_ = nullptr;
};
class ConcreteStrategy1 : public Strategy {
public:
void show() override { std::cout << "In ConcreteStrategy1 show()." << std::endl; }
};
class ConcreteStrategy2 : public Strategy {
public:
void show() override { std::cout << "In ConcreteStrategy2 show()." << std::endl; }
};
int main(int argc, char *argv[]) {
std::shared_ptr s1 = std::make_shared();
std::shared_ptr s2 = std::make_shared();
std::unique_ptr c = std::make_unique();
c->show();
c->setStrategy(s1);
c->show();
c->setStrategy(s2);
c->show();
return 1;
}