Ben bu eski olduğunu biliyorum, ama Dr8k cevabı almost vardı.
Eğer bir parça kodu yazarken dikkate alındığında, bunu değiştirmek için gidiyor varsayalım. Yani bunu gelecekte bir noktada bunun üzerine çekildi olacak değişikliklerin türlü varsayarak, daha ziyade değişim çeşit yapılmış olacağı konum anlamına gelmez.
Bir amaç gelecekte değişiklik yapma acısını hafifletmek olun: bu tek bir noktada yönetmek zor çünkü global tehlikelidir. Ne ben gelecekte bu veritabanı bağlantı bağlam farkında yapmak istiyorsanız? Ne o kullanılan her 5 defa kapatıp kendini yeniden istiyorsanız. Ne benim app ölçekleme çıkarına ben 10 bağlantıları havuzu kullanmak istediğiniz karar verirseniz? Veya bağlantıları yapılandırılabilir bir numara?
A singleton factory Bunu esneklik verir. Ben çok az karmaşıklık ile kurmak ve aynı bağlantı için sadece erişim daha fazla kazanç; Ben bu bağlantı basit bir şekilde daha sonra bana iletilen nasıl değiştirme yeteneği kazanmak.
Ben sadece singleton karşı singleton factory olarak söylemek unutmayın. Singleton ve küresel bir gerçek arasındaki kıymetli çok az fark var. Ve çünkü, bir tek bağlantısı olması için hiçbir neden yok: neden yerine normal bir küresel yaratabileceği zaman o kurma vakit geçirmek istiyorsunuz?
Ne bir fabrika sensin alır bir bağlantı almak ve almak için gidiyoruz ne bağlantıları (veya bağlantı) karar vermek ayrı bir nokta için neden.
Example
class ConnectionFactory
{
private static $factory;
public static function getFactory()
{
if (!self::$factory)
self::$factory = new ConnectionFactory(...);
return self::$factory;
}
private $db;
public function getConnection() {
if (!$db)
$db = new PDO(...);
return $db;
}
}
function getSomething()
{
$conn = ConnectionFactory::getFactory()->getConnection();
.
.
.
}
App süper ünlü ve dugg ve slashdotted alma ve karar verirken daha sonra, 6 ay içinde tek bir bağlantı daha fazlasına ihtiyacımız var, yapmanız gereken bütün) yöntemi (GetConnection bazı havuzu uygulamak olduğunu. Eğer SQL günlüğü uygulayan bir sarıcı istediğiniz karar verirseniz ya da, bir PDO alt sınıfı iletebilirsiniz. Yoksa her çağırma üzerinde yeni bir bağlantı istediğinize karar verirseniz, yapabilirsiniz bunu. Bunun yerine rijit, esnek.
Satır aşağı ürkütücü benzer bir şey için size saatlerce ve üstlenmeden saat kurtaracak parantez dahil olmak üzere kod 16 satır.
Ben ilk go turda herhangi bir özellik uygulama yapıyor değilim, çünkü ben bu "Özelliği Creep" düşünün unutmayın. Bu sınır çizgisi "Gelecek Creep", ama bir noktada, "Bugün yarın için kodlama" olduğu fikri always kötü bir şey benim için gevezelik değil.