Singleton

Das Singleton-Pattern stellt sicher, dass es von jeder Klasse nur 1 Objekt gibt. Wichtig dabei:

  • Der Konstruktor muss privat sein.
  • __clone() muss unterbunden werden.
  • Die Singleton-Methode muss überprüfen, ob es das Objekt schon gibt.

Im Folgenden stelle ich mal zwei Varianten vor:

class Ball {
	public $farbe = '';
	static private $instance = null;
	
	private function __construct(){}
  
	static public function getInstance()      {

		if (null === self::$instance) {
             self::$instance = new self;
         }
         return self::$instance;
     }
     
     private function __clone(){}
 } 

 $ball = Ball::getInstance();
 $ball->farbe = 'weiss';
 
 $ball = Ball::getInstance();
 echo $ball->farbe;
 // weiss
class Ball {
	
	public function __construct() {}
}

class Singleton
  {
      static private $instances = array();
  
      static public function getInstance($className)
      {
          if (!isset(self::$instances[$className])) {
              self::$instances[$className] = new $className();
              return self::$instances[$className];
         } else {
         	echo "Das Objekt ".$className." darf nur 1x erzeugt werden!";
         }
     }
 }

 $ball = Singleton::getInstance('Ball');
 $ball = Singleton::getInstance('Ball');
 // Das Objekt Ball darf nur 1x erzeugt werden!

Kommentare