As Mr. Knuth said it, "premature optimization is the root of all evil".
Similarly, just because you encounter a new platform, J2ME in this case, it makes no sense to forget everything about how to write good software and go back to the global-everything-procedural-everything-orgy.
Sure, use your brain, and don't do things that you wouldn't do on the desktop (e.g. java memleaks by spawning craploads of objects and forgetting to get rid of refs to them, or, just as bad, simply spawning loads of objects indiscriminately). Factories creating factories creating factories might however not be as stupid as it sounds, especially if the reason you're doing that is because it helps you write lots of unit tests. (And yes, do write unit tests on J2ME!)
And responding to David N. Welton a few answers up, "architecture astronaut", or over-engineering, doesn't have to ever happen if you go with the good old iterative approach -- don't make things more complex until it measurably simplifies your life.
So to sum up, my feeling is that everybody is just using the "memory and space constraints" on J2ME and Blackberry to toss the good sense out the window and write crappy, un-navigable software. I assure you that if you go the iterative way and test your app every so often you will notice when the performance becomes unsatisfactory and take appropriate measures at that point. And the chances are, the performance issue will be due to you doing something stupid and not due to the abstractions.
Disclaimer: if you ARE reading this from 1999, writing for CLDC 1.0 with 1KB of mem, or for a JavaCard, disregard all of the above. If however you're running on any feature-phone of today, you're in luck!