From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Thread: 103376,54aae3da1cf935cd X-Google-Attributes: gid103376,public X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news2.google.com!proxad.net!fr.ip.ndsoftware.net!newsfeed.freenet.de!feed.news.tiscali.de!news.belwue.de!LF.net!news.enyo.de!not-for-mail From: Florian Weimer Newsgroups: comp.lang.ada Subject: Re: Ada Singleton Pattern Date: Tue, 14 Sep 2004 16:21:16 +0200 Message-ID: <87llfdgcdf.fsf@deneb.enyo.de> References: <%Fi1d.245967$OR2.11136154@news3.tin.it> <14p6ezf3vze8j$.j05arkr066wi.dlg@40tude.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: albireo.enyo.de 1095171677 14651 212.9.189.171 (14 Sep 2004 14:21:17 GMT) X-Complaints-To: Cancel-Lock: sha1:IukVGtqlopUpF17Zxj258RHUi5M= Xref: g2news1.google.com comp.lang.ada:3719 Date: 2004-09-14T16:21:16+02:00 List-Id: * 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.)