Behavioral Patterns
1. Strategy
1.1. Case 1: TripMode
graph LR
p[enum TYPE]
ch1[BY_BUS]
ch2[BY_TRAIN]
ch3[BY_PLANE]
p --> ch1
p --> ch2
p --> ch3
graph LR
p[static unordered_map s_trip_modes_]
ch1[BY_BUS, ByBus*]
ch2[BY_TRAIN, ByTrain*]
ch3[BY_PLANE, ByPlane*]
p --> ch1
p --> ch2
p --> ch3
1.2. Case 2: MathOperation
1.3. Case 3: ParseFile
2. Chain of Responsibility
void filter(const Request& req, Response& res) {
deal(req, res);
#ifdef Stop passing down
if(res == FINISHED)
return;
#endif
auto next_handle = getNextHandle();
if(next_handle)
next_handle->filter(req, res);
#endif
}
2.1. Case 1: Logger
2.2. Case 2: PassNotes
flowchart
subgraph PassNotesChain
Girl1 --passToTheNext-->
Girl2 --passToTheNext-->
Girl3
Girl1 --Be my girlfriend ?--> Girl1
Girl2 --Be my girlfriend ?--> Girl2
Girl3 --Be my girlfriend ?--> Girl3
end
Req[A Note] --> PassingNotesChain
PassingNotesChain .-> Res[Response]
3. Template
3.1. Case 1: Charge Device
flowchart LR
ChargeDevice --- ChargePhone & ChargeComputer & ChargeEV --- charge
charge ---> chargePhone & chargeComputer & chargeEV