Search This Blog

2023/08/31

Chain of responsibility

 // Handler interface

class Handler {
constructor() {
this.successor = null;
}

setSuccessor(successor) {
this.successor = successor;
}

handleRequest(request) {
if (this.successor) {
this.successor.handleRequest(request);
}
}
}

// Concrete Handlers
class ConcreteHandlerA extends Handler {
handleRequest(request) {
if (request === 'A') {
console.log('Handled by ConcreteHandlerA');
} else {
super.handleRequest(request);
}
}
}

class ConcreteHandlerB extends Handler {
handleRequest(request) {
if (request === 'B') {
console.log('Handled by ConcreteHandlerB');
} else {
super.handleRequest(request);
}
}
}

class ConcreteHandlerC extends Handler {
handleRequest(request) {
if (request === 'C') {
console.log('Handled by ConcreteHandlerC');
} else {
console.log('Request cannot be handled.');
}
}
}

// Setting up the chain
const handlerA = new ConcreteHandlerA();
const handlerB = new ConcreteHandlerB();
const handlerC = new ConcreteHandlerC();

handlerA.setSuccessor(handlerB);
handlerB.setSuccessor(handlerC);

// Client
handlerA.handleRequest('A'); // Handled by ConcreteHandlerA
handlerA.handleRequest('B'); // Handled by ConcreteHandlerB
handlerA.handleRequest('C'); // Handled by ConcreteHandlerC
handlerA.handleRequest('D'); // Request cannot be handled.

No comments:

Post a Comment