First, some feedback. This is excellent. I am posting below my ruby newbie critique for each and hope to get your feedback. Your were understandably more reserved in offering your preferences since you were the presentor.
Example 1 - Pros - Simplest way to get going. Cons - Lacks separation of concerns and responsibility. In general - Not recommended.
Example 2 - Pros - Separation of concerns. Cons - Static inheritance promotes tight coupling just as in C++ and Java. In general - Not recommended in Ruby world.
Example 3 - Pros - Dynamic creation of sub-class. Use of closures avoids having to maintain instance variables, instead, ruby carries it around for us as closures. In general - can be used in Ruby world, but there are better ways as shown in next example.
Example 4 - Pros - Ruby favored use of Singleton (or ghost - Thanks David for using this term, it cleared up a lot of confusion about Singleton in my mind) as a quick one of to customize the behavior of an existing class (DisCounter). Cons - No generalization. In general - use this approach for one of cusstomizations on the fly where reuse is not of paramount importance.
Example 5 - Pros - Singletons generalized, promotes looser coupling. Cons - None really. In general - One of the Ruby recommended approaches. Question for you David. Is the ghost class somewhat similar to a proxy class in Java world?
Example 6 - Pros (?) - Demonstrates Ruby’s flexibility in aliasing an existing method and redefining it. Cons - Tight coupling results in lack of reusability of memoization code.
Example 7 - Pros - Removes the tight coupling introduced in example 6. Cons - Weird naming of methods. Can be cleaned up. In general can be used if you don’t mind the weird naming (I don’t but I am a unix shell script programmer, is there any other reason not to use this approach?).
Example 8 - Cleaner syntax, but same thing really as Example 7.
Example 9 - This is the one that I don’t get yet, but as you are pointing out, I need to puts in various places and try to think what is happening where and why. Any pointers in trying to understand it are greatly apprecited.
Let me know if I have missed anything anywhere or am wrong in my interpretation (I won’t be surprised).
Thanks again, and you were right. This worked out much better than a number of books that I have (including yours). I will go back and review them.