Weigh Java pattern choices by clarity, coupling, runtime behavior, and team cost instead of assuming any pattern is automatically a best practice.
Every pattern trades one kind of pain for another. In Java, the real skill is knowing which pain the codebase can afford.
Patterns often improve:
Those benefits are real, but they are not free.
Patterns also introduce:
That cost is acceptable only when it buys back a real reduction in complexity somewhere else.
Ask:
These questions usually produce better Java design than trying to maximize pattern coverage.