PHP Semi-Singleton

Írta: tcz on June 18, 2009
Uncategorized

Gyorspost következik.

Nagyon szeretem a singleton design patternt (erre van magyar kifejezés? “egyke tervsablon”?), mert nagyon könnyen összefoghatóak vele egy moduláris PHP rendszer egyes elemei. Olykor felmerül a szükség, hogy semi-singleton (”félegyke???”) osztályokat alkossunk. Mit értek ez alatt?

Olyan osztályokra gondolok, amelyekből bizonyos tulajdonságok alapján csak egy példányt engedünk kreálni, de ha ezek a tulajdonságok eltérnek, akkor lehet belőlük bármennyi. Például egy termékkel kapcsolatban végzett műveletekre használt osztály vagy egy vásárló tranzakcióit nyilvántartó és lebonyolító osztály.

Hogyan csináljunk semi-singleton osztályt? Nagyon egyszerű:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class TermekMuveletek {
	private static $_singleton = array();
	public $termekid;
 
 	private function __construct($termekid) {
		$this->termekid=$termekid;
	}
 
	public static function Get($termekid) {
		if (is_null (self::$_singleton[$termekid])) {
			self::$_singleton[$termekid] = new TermekMuveletek($termekid);
		}
		return self::$_singleton[$termekid];
	}
}

Ennyi az egész. Szebb lenne, ha termekid read-only lenne, de ez PHP-ból csak __set és __get használatával valósítható meg, ami jócskán lassít. Gyorspostunkat olvashatták.

9 hozzászólás to PHP Semi-Singleton

saxus
2009. 06. 19.

A “Design Patterns: Elements of Reusable Object-Oriented Software” című könyv magyar fordítása szimplán “egykének” hívja a “singleton” tervezési mintát és tudtommal sulikban is egykének tanítják, már ahol teszik.

Mondjuk mint egynéhány egyéb kiskapus kiadványnál, itt is ki tudok azért akadni néhány fordítástól. pl. “elvont gyár” (abstract factory)…

saxus
2009. 06. 19.

Kicsit jobban végig gondolva, a fenti kódra én nem alkalmaznám az “egyke” nevet, inkább egyedi (unique) vagy “különböző”-nek hívnám.

tcz
2009. 06. 19.

Hát… igen… Nem akarok olyan seggfej lenni, aki önmagát linkeli, de: http://blog.tcz.hu/nyelvtan/
De ez a kód szempontjából végülis lényegtelen :) A semi-singleton azért is rossz, mert amennyire tudom, a Java-ban egész mást jelent. És tényleg, ha már itt tartunk: “Dzsava” vagy “Jáva”? :-)

saxus
2009. 06. 19.

Mifelénk jáváznak a népek. Dzsávának még hallottam itt-ott emlegetni (főleg olyan körökben, ahol szeretnek kicsit túlságosan hunglishül beszélni) dzsava-nak már nem nagyon. Utóbbi kettő egyébként szvsz undorító.

Viszont érdekes, hogy a JavaScript-t mindig “java” -val kezdik, akárhogy ragozzák, voszont a Javában kiejtésben időnként változik az első a á-ra. “használj jávát”, “jávában írom”, stb., de nem mindig “már megint szívat a java”.

tcz
2009. 06. 19.

Hát én nem is tudom. Nekem a Java az Jáva, de a JavaScript az DzsavaSzkript.

butcher
2009. 07. 05.

Dzsigabájt! É :) )

saxus
2009. 12. 27.

Úgy néz ki, van rá “hivatalos” név: Multiton

http://en.wikipedia.org/wiki/Multiton_pattern

tcz
2009. 12. 27.

jaja én is nemrég olvastam :)
ez se rossz, bár olyan, mintha teljsen ellentétes lenne a Signleton működésével… hiszen a Single és a Multi ellentétpár.

Oligoton? :)
Vagy mindegy!

saxus
2010. 01. 04.

Sehogy se egyke, mert mindenképp több készülhet belőle. Akkor már inkább az unique/egyedi felöl kellene megközelíteni a témát, bár igazából abban sem vagyok biztos, hogy érdemes ezen vitatkozni.

Tervezési minták is csak problémákra kiindulópont egy megoldáshoz előnyökkel/hátrányokkal. Tovább lehet fejleszteni és el is lehet térni tőlük. Szvsz.

Szólj hozzá!

WP_Big_City