Strategy pattern is a business level pattern, a standardized interface way of how to achieve given goals/data results.
Chain of responsibilities is more implementation pattern - describing how you process the data, but not focusing for what (goals of a strategy).
For example:
Let's say we have 100 young swimmers in a club and 4 times a year you must select 10 person team for a regular national competition.
The competitions have different profiles - some have more backstroke races, some more relay races, etc ... what means you must apply different team selection strategy.
So you have 4 dedicated strategies, one for each event.
In the code it could look like:
RankingsSet rankedClubSet = getSwimmersRankings(SwimmersSet allSwimmers)
SwimmersSet teamOf10 = selectTeamForCompetion(RankingsSet rankedClubSet, CompetionSelectionStrategy strategy)
But how to get the rankings?
You just ask for opinion the coaching staff:
swimmer(self-assessment) -> physiologist -> biological renewal trainer -> doctor -> swimming trainer -> teammates -> teachers -> parents ... ----> strategy/qualifying committee
This is a chain of responsibilities. The order is important ... a doctor cannot assess a swimmer without evaluation from physiologist, parent opinion does not matter if main trainer rejects a swimmer ...
The ranking information is merged while passing from one processor to the next processor, some data are hidden for some processor, other can be decorated with additional notes ...
What is interesting in this case that as a narrator from the club you can think of strategy on two levels:
- pure calculations on rankings numbers to determine the team of 10 for a competition i.e. CompetionSelectionStrategy
- the entire process of selection - collecting rankings, tuning the dedicated strategies, questions how sport psychologist opinion matters etc.
but in "Design Patterns" terminology the strategy pattern is only 1.
Point 2. is too big to analyze in terms of single design pattern.
It is important to remember that in Design Pattern analysis you should focus on rather small pieces of functionality, where you can easily identify a single pattern and implement it.
When functionality chunk is too big automatically many patterns and relation between them are involved, the discussion becomes chaotic, some guys are so fixated on some patterns that they see them everywhere. Identifying design patterns is based on slow analysis and careful problem decomposition.