There's a sentiment that design patterns are ways to make up for missing features in a language. I think that misses the forest for the trees as when people say that they almost always mean the GoF patterns, and not the concept of patterns in general.
Strategy pattern is a great example. First class functions make the GoF pattern a moot point. But it's still useful to understand that this is a useful thing to want to do, whether or not one has direct language support.
I've come to think that that perspective unnecessarily conflates the design pattern with the strategy used to implement it.
Things like the GoF model for how to implement Strategy are kind of a big deal in languages that lack first class functions. But there is also universal value in the basic idea of structuring your code so that you can inject behavior from outside. It's so valuable that many languages weave it into the very fabric of their design. FP fans fixating on the complexity of things like the GoF Strategy pattern and concluding that design patterns are just a band-aid over missing language features strikes me as being like fish noticing the inconvenience of humans needing plumbing and drinking vessels to get their water, and congratulating themselves for not needing water.
This is exactly what I'm saying. It's often true that for the specific GoF implementations they're often a band-aid. But what you said is also true, and much more important.
Better languages change the way we think. First class functions make passing code around so easy and natural there's barely even a name for such a thing. It's just something you do without even thinking. In lesser languages, passing some function around is such a herculean effort people had to ritualize it into an accepted convention with a name and everything.
No matter what pattern we look at, we find it's actually hiding some absurd language weakness. Factories? They're just normal methods that hide the new keyword which introduces hard coupling at the ABI level and can't construct subtypes. Singletons? They exist to work around the fact that classes don't act like objects: classes with static state are natural singletons but they can't implement interfaces or be passed around as objects.
In better languages such as Ruby we discover that new itself is actually a factory method and nobody even realizes it. In Ruby classes are objects and natural singletons and there are no limitations to work around.