Hi,

Case 1) A singleton class:
<code>
<PRG> //---------------------------------------------------------------------------------------------------//
CLASS MyClass SINGLETON // THIS IS A SINGLETON CLASS!!!
    DATA Status INIT 0
    METHOD ChangeStatus() INLINE ::Status := 1
ENDCLASS
******************************* Procedure Main
*******************************
? MyClass():Status // 0
? MyClass():ChangeStatus() // 1
? MyClass():Status // 1
Return
Case 2) A not singleton class:
CLASS MyClass // NOT A SINGLETON CLASS!!!
    DATA Status INIT 0
    METHOD ChangeStatus() INLINE ::status := 1
ENDCLASS
? MyClass():Status // 0
? MyClass():ChangeStatus() // 1
? MyClass():Status // 0
Return

Since I do not know anything about singletons and doubletons, here is two simple different implementations that came to my mind (and I guess 5 more different approaches can be use to get the expected result):

#include "hbclass.ch"

STATIC s_oSingleton1

PROC main()
  ? MyClass1():Status
  ? MyClass1():ChangeStatus()
  ? MyClass1():Status

  ? MyClass2():Status
  ? MyClass2():ChangeStatus()
  ? MyClass2():Status
RETURN

FUNC MyClass1()
  IF s_oSingleton1 == NIL
     s_oSingleton1 := MyClass1Real()
  ENDIF
RETURN s_oSingleton1

CLASS MyClass1Real
  DATA Status           INIT 0
  METHOD ChangeStatus() INLINE ::Status := 1
ENDCLASS

CLASS MyClass2
  CLASSDATA Status      INIT 0
  METHOD ChangeStatus() INLINE ::Status := 1
ENDCLASS



Regards,
Mindaugas
_______________________________________________
Harbour mailing list (attachment size limit: 40KB)
Harbour@harbour-project.org
http://lists.harbour-project.org/mailman/listinfo/harbour

Reply via email to