First the background, during interviews in the past, many times I have been asked to design some or other variation of card game as programming puzzle, and I have tried to design it in OO way, but I have never been satisfied with my solutions. However it was not until recently that I realized that I had been approaching the problem from the wrong direction. Specifically I was trying to solve the problem by modeling individual card as an object.

Problem with this is individual cards don't have any non-trivial intrinsic behavior and therefore are not suitable (or primary) candidate as objects. What is interesting and important about cards are rules and constraints, such as there could be only four suits, or only thirteen cards in each suit. Of course, then there are any number of rules for games.

So my questions are


Are there any idioms/constructs/patterns to program for rules & constraints. 
How many in 1 can be applied in conjunction with OO paradigm.


Any competent C# programmer should be able to quickly pick up enough Java to write an Android program, but that's not the point. It's a matter of code reuse.

Think about six months from now, when your Android program is popular and your users are asking for a version for iPhone and Windows Phone 7. If you had used MonoDroid, you can reuse most of your application logic with MonoTouch (Mono for iOS) and the Windows Phone SDK. Now they want a web-based version, so you include the same class libraries in an ASP.Net project. Desktop versions? No problem, that same class library works with .Net under Windows or Mono on Linux and OS X.

Other than C or C++, I can't think of any other languages that would let you reuse the same code on all of those targets.

Edit to address some concerns in the comments: .Net and Mono will not let you write a complete program and use that same program everywhere. They will let you share some code, and like all cross-platform programming the amount of shared code depends on the type of programs you're writing and how well you separate the UI and hardware code from the application logic.

However, if you write your Android app in Java, how much of that is reusable on iOS or Windows Phone? That's the point I was trying to make. I had existing C# libraries that were working on Mono for Android in much less time than it would have taken to reimplement them, even though I already knew Java. I have some code that is shared--unmodified--between a web site, desktop programs, and mobile apps on two different mobile platforms, thanks to Mono.

I didn't mean to imply, even indirectly, that Mono was the perfect tool for every mobile development situation. It's a tradeoff, but I firmly believe that there are situations when Mono is a much better choice.

Please see (and upvote!) Jason S's answer for another perspective.
