( persicsb | 2016. 08. 26., p – 10:00 )

Singleton és Factory esetén sem kell statikus függvény, sőt, a statikus függvény ellenjavalt. Mert ha használsz valahol direktben egy publikus statikus metódust, akkor az osztályod API-ja hazudik arról, hogy kik az együttműködői.
Képzeljük el, hogy van a következő kód:


public class MyClass {
 public Result doIt() {
  return MyDatabaseConnectionFactory.createConnection().doIt();
 }
}

Ezzel az a baj, hogy hivatkozik egy statikus factoryre.
Amikor tesztelnéd a kódot, vagy éppen más kliens kódot írnál hozzá, azt látod, hogy a rendszeredben Result előállításához nem kell semmi a MyClassnak. Dehogynem, egy felkonfigurált MyDatabaseConnectionFactory kell neki, anélkül nem működik a kódod. Viszont a MyClass API-ja ezt sehol nem mondja meg neked - hazudik.

A Factoryt szépen classként, statikus metódus nélkül kell felépíteni, majd ott, ahol használni akarod a Factoryt, oda egy DI container majd beinjektálja.

A Singleton meg nem attól Singleton, hogy létezik privát a konstruktora, meg létezik egy statikus getInstance() metódusa.
A singleton attól singleton, hogy a program futása alatt egy példány létezik belőle, és mindenki, aki példányt akar a singletonból, ezt az egy példányt kapja meg.
Ezt is megoldja a DI container általi injektálás, ugyanis az objektum létrehozását a DI containerre bízod, és megmondod neki, hogy mindenhova ugyanazt a példányt injektálja be.