nesnesi oluşturmak için bir fabrika sahip yarar?

3 Cevap php

Ben fabrika tasarım deseni anlamaya çalışıyorum.

(Istemci istediği nesne) istemci ve ürün arasında bir aracı olması iyi neden ben anlamıyorum.

Hiçbir fabrika ile örnek:

$mac = new Mac();

Bir fabrika ile bir örnek:

$appleStore = new AppleStore();
$mac = $appleStore->getProduct('mac');

Nasıl fabrika desen istemci üründen decouple nedir?

Birisi olumsuz örnek 1 etkileyecek gelecek bir kod değişikliği bir örnek vermek, ama olumlu örnek 2 de bu yüzden ayırmasının önemini anlamak misiniz?

Teşekkürler.

3 Cevap

Ben bu nesnelerin bazı türleri oluşturmak için gerekli kaynakları ile ilgisi olduğunu düşünüyorum.

Eğer bir Mac kurmak için birini söyleseydim gayrı, bu tasarım, geliştirme, üretim ve test yıllar alacağını ve bunun doğru yapılması olmayabilir bir zahmetli bir süreç olacaktır. Bu süreç her bir Mac için tekrar edilmesi gerekir. Eğer bir fabrika tanıtmak Ancak, tüm zor işleri sadece bir kez yapılabilir, daha sonra Mac'ler daha ucuza üretilebilir.

Şimdi Joomla en factory.php düşünün. Ne söyleyebilirim itibaren, jFactory temel amacı nesneleri havuzu ve aynı kopyalanan değil olmalıdır emin nesneleri yapmaktır. Örneğin, JFactory::getUser() ve tek bir nesneye bir başvuru dönecektir. Bir şey bu kullanıcı nesnesi içinde değişti alırsa, her yerde görünecektir. Ayrıca, JFactory::getUser() bir referans değil, yeni bir nesne döndürür unutmayın. Bu sadece bir kurucu ile yapamayacağı bir şeydir.

Bir nesneyi inşa Çoğu zaman, yerel bağlam gerekir ve bu bağlamda kalıcı ve büyük olasılıkla birçok formlar alabilir. Örneğin, bir MySQL veritabanı tutan kullanıcılar olabilir. Kullanıcı nesneleri bir kurucu ile oluşturulan iseniz, kurucusuna bir veritabanı nesnesi geçirmek (veya küresel bir değişken güvenmek olması) gerekir. PostgreSQL için uygulama geçiş için karar verirseniz, Database nesne semantik yapıcı tüm kullanımları inceleme gerekir neden değişebilir. Global değişkenler bize bu ayrıntıları gizlemek izin, ve bu yüzden fabrikalar yapmak. Böylece, bir kullanıcı fabrika kullanıcı nesneleri gerekli yerlerde kullanıcı nesneleri inşa ayrıntılarını decouple olacaktır.

Ne zaman fabrikalar yararlı? Oluştururken bir amacı, arka plan bilgileri içerir. Ne zaman kurucular daha iyi? Global değişkenler yeterli zaman.

Bu örnek türü Mac bir nesne döndürür ve farklı bir şey olamaz:

$mac = new Mac();

Bu Mac, bu Mac arayüzünü eşleşen bir sınıf olabilir değil bir alt sınıfı olamaz.

Aşağıdaki örnek türü Mac ya da başka hangi tür fabrika uygun karar bir nesneyi döndürebilir Oysa.

$appleStore = new AppleStore();
$mac = $appleStore->getProduct('mac');

Sen Mac alt sınıflarının, Mac farklı bir modeli temsil eden her bir dizi isteyebilirsiniz. Daha sonra kullanabilmek için bu alt sınıflarından hangisini karar fabrikada kod yazmak. Sen new operatör ile bunu yapamaz.

Yani bir fabrika size nesne yaratma daha fazla esneklik verir. Esneklik genellikle ayırımı ile el ele gider.


Yorumlarınız Re: I never kullanmak demezdim new. Aslında, basit nesne oluşturma çoğunluğu için new kullanırım. Ama istemci kodu yazma kimin ile ilgisi yoktur. Fabrika desen dinamik örneğini sınıfı seçebilirsiniz bir mimari istediğiniz zaman için.

Apple Mağazası örnekte, muhtemelen bir ürün örneğini ve bir alışveriş sepetinize eklemek için bazı basit kod isterim. Eğer new kullanmak ve her farklı ürün türü için farklı nesne türleri varsa yapabilir, bu yüzden size büyük bir case deyimi yazmak olurdu bir new uygun tipte nesne. Eğer bir ürün türü eklemek her zaman, o case bildirimde güncellemek gerekiyor. Ve uygulamanızın diğer bölümlerinde bu case tabloların çeşitli olabilir.

Bir fabrika kullanarak, sadece güncellemek için bir yer olurdu, bu bir parametre almak ve nesnenin doğru türde örneğini bilir. Hiçbir kod değişikliği gerekmez ile app tüm yerler örtülü, yeni türü için destek kazanacaktır. Bu bir takım iseniz tek geliştirici konum olsun veya olmasın bir kazançtır.

Eğer alt tiplerinin çeşitli desteklemek gerekmez Ama yine de, bir fabrika gerekmez. Sadece basit durumlarda new kullanmaya devam.