[MUD-Dev] Singleton design pattern (OT?)

Adam Wiggins adam at angel.com
Tue Aug 31 16:20:43 CEST 1999


On Tue, 31 Aug 1999, Cynbe ru Taren wrote:
> > Eli Stevens once said:
> > I have been working on the problem of how to best implement the Singleton
> > class [1] from _Design Patterns_, by Gamma, et al. in C++.  I have wasted a
> > lot of time fooling around with this, and now that I have an answer that I
> > think I like, I am going to throw it out in hopes that someone else will be
> > saved a bit of time.  :)
> 
> Last company I worked at (Activerse, a Java outfit) the guys were
> threatening to > strangle the next person to implement a Singleton in
> company code.  Seems like in practice most of them turn out to need multiple
> instances sooner or later, and recoding to allow this is a pain.

I'm pretty neutral on singletons (it always seemed to me that they don't
hold any particular advantage over a global variable), but they are very
popular here at Angel.  We've been using them heavily in our code for
years with nary a complaint.

Of course, it's very simple to create one: thanks to some macros we've long
used, you only need a single line in the class definition:

class foobar
{
   SINGLETON_INTERFACE(foobar);
/* rest of class stuff */
};

And one in the .c file itself:

#include "foobar.h"

SINGLETON_IMPLEMENTATION(foobar);

This implements GetInstance() and related functions.  Then we usually have
a macro for easy access in the .h:

#define FOOBAR foobar::GetInstance()


Generally we use this for all of the basic game "managers", including input,
render, sound, game, AI, and so forth.  So the code ends up looking like
this:


  [ ... ]

  GAME.AddToScore(1000);

  if (INPUT.ButtonPressed(BTN_3))
     /* ... */

  crCreature *cr = AI.FindClosestLivingCreature(pos);

  RENDER.Draw(cr->GetModel(), cr->GetMatrix());


Since they are all just macros, you could always change them to access
something else later anyways.  But we've never needed to.  *shrug*


Adam





_______________________________________________
MUD-Dev maillist  -  MUD-Dev at kanga.nu
http://www.kanga.nu/lists/listinfo/mud-dev



More information about the mud-dev-archive mailing list