Design Java Strategy contexts and contracts so the variable behavior is isolated without leaking too much context into the strategy.
A strong Strategy design depends less on the pattern name and more on the boundary between the context and the strategy contract.
The context should own:
The strategy contract should expose only what the algorithm needs. If the strategy takes the entire context object just for convenience, coupling starts creeping back in.
Bad boundary:
Better boundary:
Keep the strategy interface small and keep the context responsible for everything that is not truly variable.