different programming languages have different features or lack certain features. Design patterns are a way to work around those shortcomings. I have seen the books and list
Delegates and events in C# and .Net make it trivial to implement the observer pattern, since it is so commonly used, e.g. to handle GUI events.