Example #1
0
int main() {
	CallHandler handler;

	handler.employ(new Fresher("Lily"));
	handler.employ(new Fresher("Ben"));
	handler.employ(new Fresher("Carlos"));
	handler.employ(new Fresher("David"));
	handler.employ(new Fresher("Thomas"));
	handler.employ(new TechLead("Anglela"));
	handler.employ(new ProductManager("Benson"));

	Call call1_1(CallHandler::FRESHER);
	Call call1_2(CallHandler::FRESHER);
	Call call1_3(CallHandler::FRESHER);
	Call call1_4(CallHandler::FRESHER);
	Call call1_5(CallHandler::FRESHER);
	Call call2(CallHandler::TECHLEAD);
	Call call3(CallHandler::TECHLEAD);
	Call call4(CallHandler::PRODUCTMANAGER);

	handler.dispatchCall(&call1_1);
	handler.dispatchCall(&call1_2);
	handler.dispatchCall(&call1_3);
	handler.dispatchCall(&call1_4);
	handler.dispatchCall(&call1_5);
	handler.dispatchCall(&call2);
	handler.dispatchCall(&call3);
	handler.dispatchCall(&call4);

	call1_1.disconnect();
	call2.complain();
	call3.disconnect();

	// Call Handler updates and dispatch Call4 to ProductManager
	handler.update();
	call4.disconnect();

	// Call Handler updates and dispatch Call2 to ProductManager
	handler.update();

	// Complain again, product manager just give up ...
	call2.complain();

	// ...

	return 0;
}