Реализации на С++
Chain of Responsibility
Общая реализация на языке С++
class AbstractHandler
{
using PtrAbstractHandler = shared_ptr<AbstractHandler>;
protected:
PtrAbstractHandler next;
virtual bool run() = 0;
public:
using Default = shared_ptr<AbstractHandler>;
virtual ~AbstractHandler() = default;
virtual bool handle() = 0;
void add(PtrAbstractHandler node);
void add(PtrAbstractHandler node1, PtrAbstractHandler node2, ...);
void add(initializer_list<PtrAbstractHandler> list);
};
# include <iostream>
# include <initializer_list>
# include <memory>
using namespace std;
int main()
{
shared_ptr<AbstractHandler> chain = make_shared<ConcreteHandler>();
chain->add(
{
make_shared<ConcreteHandler>(false),
make_shared<ConcreteHandler>(true),
make_shared<ConcreteHandler>(true),
AbstractHandler::Default()
}
);
cout << "Result = " << chain->handle() << ";" << endl;
}
Last updated
Was this helpful?