Wpis z mikrobloga

Ktoś wie jak wygląda implementacja (w Javie) Singletona, tylko takiego, żeby dało radę stworzyć np. 3 obiekty? Hmm takie zadanie dał nam gościu na egzaminie i do teraz się zastanawiam jak je rozwiązać. W spojlerze implementacja Singletona pozwalającego stworzyć jeden obiekt


private static Singleton unikalnaInstancja;


private Singleton(){}


public static synchronized Singleton tworzenieInstancji(){


if(unikalnaInstancja=null){


unikalnaInstancja = new Singleton;


}


return unikalnaInstancja;


}


#programowanie #java #wzorceprojektowe #singleton
  • 31
@Nadrill: no własnie w tym cały senk, sami pytaliśmy prowadzącego #gdziesens #gdzielogika wytłumaczył nam to mówiąc, że np. jakiś serwis będzie pozwalał na sesję np. dwóch użytkowników w tym samym czasie ( ͡º ͜ʖ͡º) wspomniał również, że rzadko używane, ale używane
może coś takiego, nie testowałem.



public
```**```
 
```**```
class
```**```
 Singleton {

```**```
private
```**```
 
```**```
static
```**```
 Singleton unikalnaInstancja;

```**```
private
```**```
 
```**```
static
```**```
 
```**```
int
```**```
 singletonCount = 0;

```**```
private
```**```
 Singleton(){}

```**```
public
```**```
 
```**```
static
```**```
 
```**```
synchronized
```**```
 
```**```
void
```**```
 tworzenieInstancji(Singleton singletonRef) {

```**```
if
```**```
(singletonRef == 
```**```
null
```**```
) && (singletonCount <3) singletonRef = 
```**```
new
```**```
 Singleton();

``````

}
IMO po prostu metoda tworzenieInstancji() powinna przyjmować jakiś parametr (inta, stringa) określającego którą z instancji ma zwrócić. Najlepiej inta z zakresu 0-2 obsługiwać. Zamiast Twojego unikalnaInstancja mieć tablicę tych instancji trzyelementową, i tworzyć lub zwracać.

w każdym razie takie coś w mocno pokręconej implementacji ActiveRecord ;)
@plusiarz:



public
```**```
 
```**```
class
```**```
 Singleton {

```**```
private
```**```
 
```**```
static
```**```
 
```**```
int
```**```
 singletonCounter = 0;

```**```
private
```**```
 Singleton(){}

```**```
public
```**```
 
```**```
static
```**```
 
```**```
synchronized
```**```
 
```**```
void
```**```
 tworzenieInstancji(Singleton singletonRef) {

``````

 
```**```
if
```**```
(singletonRef == 
```**```
null
```**```
) && (singletonCount <3) { 

    singletonRef = 
```**```
new
```**```
 Singleton(); 

    singletonCounter++;

 }

}

``````

}
@plusiarz: pobawilem sie kodem:



public
```**```
 
```**```
class
```**```
 SingletonTest {

``````

    
```**```
public
```**```
 
```**```
static
```**```
 
```**```
void
```**```
 main(String[] args) {

       Singleton s1 = 
```**```
null
```**```
;

       Singleton s2 = 
```**```
null
```**```
;

       Singleton s3 = 
```**```
null
```**```
;

       Singleton s4 = 
```**```
null
```**```
;

       Singleton.tworzenieInstancji(s1);

       Singleton.tworzenieInstancji(s2);

       Singleton.tworzenieInstancji(s3);

       Singleton.tworzenieInstancji(s4);

    }

}

``````

 
```**```
class
```**```
 Singleton {

```**```
private
```**```
 
```**```
static
```**```
 
```**```
int
```**```
 singletonCounter = 0;

```**```
private
@lerner: o ile na drugim terminie również najdzie się to zadanie nie omieszkam zawrzeć tej linijki "Masz juz trzy instancje debilu! Nie stworze nastepnej!" ( ͡ ͜ʖ ͡)