Ben sadece ne PHP fabrika ve nasıl benim kodunda kullanabilirsiniz olduğunu bilmek istiyorum?
Orada ve faydaları ve bunun sakıncaları?
Onu daha kolay desteklemek ve refactor yapma, kod belirli sınıf isimlerini kaldırmak için bir yol sağlar, çünkü fabrika, en kullanışlı modellerinden biridir.
Bir örnek düşünün: Eğer e-posta gönderir ve bu amaçla 'Mailer'ın' sınıfını kullanan bir uygulama var:
class Site
function sendWelcomeMail
$m = new Mailer;
$m->send("Welcome...");
function sendReminderMail
$m = new Mailer;
$m->send("Reminder...");
etc...
Bir gün 'NewMailer' adlı başka bir mailler sınıf, kullanmaya karar. Yukarıdaki gibi kod ile Mailer tüm tekrarlarını bulmak ve NewMailer içine elle değiştirmek zorunda. Bu büyük projede gerçek bir ağrı olabilir.
Bir fabrika ile 'yeni' ve belirli sınıf isimlerini kullanmak ve bir nesneyi gerektiğinde sadece bir yöntemini çağırmak yok
class Factory
function createMailer()
return new Mailer;
class Site
function sendWelcomeMail
$m = Factory::createMailer();
$m->send("Welcome...");
function sendReminderMail
$m = Factory::createMailer();
$m->send("Reminder...");
etc...
Hepsi sadece fabrika yöntemde tek satır değiştirmek biryere NewMailer ile Mailer değiştirin.
Bir AbstractFactory a Creational Design Pattern, yani
Somut sınıfları belirtmeden ilişkili ya da bağımlı nesnelerin aileleri oluşturmak için bir arayüz sağlar.
Özetle:
class MercedesFactory
{
public static function createCar()
{
$engine = new MercedesEngine;
$car = new Mercedes($engine);
return $car;
}
}
Factory Method, de bulunmaktadır ki
Bir nesne oluşturmak için bir arabirim tanımlar, ancak alt sınıfları örneğini hangi sınıf karar verelim. Fabrika Yöntem alt sınıflar için sınıf defer örnekleme sağlar.
Özetle:
class User
{
public static function create()
{
return new self;
}
}
Bu bir fonksiyon olduğunu creates classes. Eğer davranış küçük varyasyonları ile toplu oluşturmanız sınıflar için gerekiyorsa o zaman yararlıdır. Öte yandan, kötüye FactoryFactoryFactoryFactoryFactoryFactory gibi şeyler olur.