This is explained in the JERIC paper, but here’s the gist of it. The Singletons were placed there for pedagogic purposes. As soon as students see Singletons, they grab onto them and abuse them. This happens whether they are introduced in class or whether they see them somewhere else. The problem with seeing them outside of a controlled environment is that the problems inherent in Singletons are not obvious. Hence, I made a conscious effort in this project to include a few Singletons so that we could have class discussions about how they worked syntactically and what the implications were for overall system design. The conversations were very enlightening, with most students seeing that Singletons were dangerous. (In fact, you and I had a very similar discussion to this earlier regarding sound systems, and that’s one place where my students seemed to think that the Singletons were okay.)
Unfortunately, despite the enlightening conversations, I saw that my students still abused the Singletons, especially the old C/C++ programmers who cared more about coding than software design. My current plan is that, next time I undertake this kind of project, that it needs to be large enough scale that the implications are clear. To do this would require writing several versions of a software system, so that the negative effects of ad hoc design decisions made early in the lifecycle can be seen later in the lifecycle. Of course, I’ll probably never have the time to actually do this, and we’re hindered in University by the semester system: even the biggest one-semester student project is still small, in the grand scheme of things.
So to sum it up to Haksu: I recommend understanding Singletons so that you can communicate about them, but I do not advise using them, despite what’s in the EEClone code.