1. Principio NTR. NO TE REPITAS, no lo hagas, el código se volverá en tu contra. Sólo repite si es muy difícil no hacerlo o si estás absolutamente seguro de que no te repetirás por tercera vez, aunque te prometo que esa tercera vez llegará para ti o para la persona que tenga mantener que mantener ese código.
2. Mantén el alcance (scope) al mínimo, se lo más privado posible. Mantén las variables lo más cerca posible de su ámbito local como sea posible. Esto te ahorrará muchos dolores de cabeza, te protegerá de errores en la lógica de tu programa por haberle hecho algo a una variable o cambiar algo en el lugar incorrecto, y también te mantendrá las cosas más simples.
3. Se funcional. A veces te sentirás tentado a ser perezoso y no pasar parámetros a un método pensando que eres muy listo y que es mejor cambiar alguna propiedad interna del objeto de modo que otra función de la misma clase pueda acceder a ella; gran error. Esto puede ser equivalente al consejo de los lenguajes de programación funcional, donde se dice que el uso de variables globales es una mala idea. Sí, tenemos propiedades de los objetos por varias razones, pero si la lógica de un método depende del estado de una variable, también podrías ser explícito y pasarla en el método como parámetro.
4. Sólo vale la pena extender las clases abstractas. Si tienes el control sobre la clase que estás a punto de extender (si está en tu código base), antes de extenderla echa un vistazo y asegúrate de que es una clase abstracta. Las clases abstractas están destinadas a ser extendidas, por lo que puedes estar seguro de que estás haciendo lo correcto.
5. Mantén la duración de un objeto lo más corta posible. Esto se relaciona con mantener el alcance (scope) al mínimo y tratar de evitar objetos únicos tanto como sea posible (dependiendo de la conveniencia), en el caso de java el JRE tiene un mejor tiempo de recogida y te ahorrará de problemas como pérdida de memoria. Pon esas fábricas a trabajar.
Fuente: http://www.nolapeles.com/