comp.lang.ada
 help / color / mirror / Atom feed
From: Florian Weimer <fw@deneb.enyo.de>
Subject: Re: Ada Singleton Pattern
Date: Tue, 14 Sep 2004 16:21:16 +0200
Date: 2004-09-14T16:21:16+02:00	[thread overview]
Message-ID: <87llfdgcdf.fsf@deneb.enyo.de> (raw)
In-Reply-To: 14p6ezf3vze8j$.j05arkr066wi.dlg@40tude.net

* Dmitry A. Kazakov:

> On Mon, 13 Sep 2004 15:04:27 GMT, Luca Stasio wrote:
>
>> Hi, there is a way to implement the Singleton Pattern in Ada?
>> There are some examples out there?
>> Thanx.
>
> package Foo is
>    type Singleton (<>) is limited private;
>    ... -- Public interface subroutines
>
>    The_Only_One : constant Singleton; -- The value
> private
>    type Singleton is new Integer; -- Any implementation you want
>    The_Only_One : constant Singleton := 5;
>
> The public view of Singleton is unconstrained and limited, which prevents
> it from either being copied or declaring new objects of this type.

This is only a partial solution, unfortunately.

Ada *requires* that the package initialization code runs before
The_Only_One is accessed.  This is different from many other languages
(where the initialization order of global objects is mostly
unspecified and not related to actual usage patterns) and solves a big
chunk of the singleton problem.

However, you still have to deal with termination on your own: you must
ensure that no client is still using the singleton object before you
destroy it.  There is no direct support in the language for this part
of the problem, and you have to use one of the traditional approaches
if this matters to your application (or assignment 8-).

(I tried to avoid Ada-specific terminology above because Luca probably
isn't familiar with the Ada language.)



  parent reply	other threads:[~2004-09-14 14:21 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-09-13 15:04 Ada Singleton Pattern Luca Stasio
2004-09-13 15:33 ` Dmitry A. Kazakov
2004-09-13 16:18   ` Luca Stasio
2004-09-13 17:01   ` Luca Stasio
2004-09-13 18:43     ` Martin Dowie
2004-09-13 19:37       ` Martin Dowie
2004-09-14  2:29       ` Steve
2004-09-14  8:52         ` Martin Dowie
2004-09-14 12:46           ` Jim Rogers
2004-09-14 13:57       ` Luca Stasio
2004-09-13 20:38     ` Georg Bauhaus
2004-09-14  8:17     ` Dmitry A. Kazakov
2004-09-14 13:56       ` Luca Stasio
2004-09-14 14:21   ` Florian Weimer [this message]
2004-09-14 14:48     ` Dmitry A. Kazakov
2004-09-14 15:04       ` Florian Weimer
2004-09-15  7:33         ` Dmitry A. Kazakov
2004-09-16  6:48           ` Florian Weimer
2004-09-16  7:45             ` Dmitry A. Kazakov
2004-09-14 15:38     ` Luca Stasio
2004-09-14 16:32       ` Florian Weimer
2004-09-14 17:43         ` Luca Stasio
2004-09-15  7:27       ` Martin Dowie
2004-09-15 19:38         ` Luca Stasio
2004-09-15  5:43 ` Matthew Heaney
2004-09-15 19:38   ` Luca Stasio
2004-09-18 21:47 ` Pylinius
2004-09-19  4:19   ` Matthew Heaney
2004-09-20  3:03     ` Pylinius
2004-09-23  7:35   ` Luca Stasio
2004-09-27  5:22     ` Pylinius
2004-09-27  8:05       ` Luca Stasio
2004-10-05 17:55       ` Luca Stasio
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox