Tetris clone in Java
Ages ago I did a Tetris clone, and my idea for a data structure was this:

A circular linked list of matrices.

How do you rotate?  Walk the list...

You can have a single array of these lists (one per each block type), and your game logic's notion of the "current piece" is a reference to something inside that table.  That way the game logic can have no knowledge of the different shapes, and you declare a small array that defines what the shapes are.