Bu en basit anlamda ne yapar bana, karıştırır? Eğer anne ya da birine açıklayan Pretend neredeyse lütfen.
Bir fabrika bir nesne oluşturur. Yani, inşa etmek istiyorsa
class A{
public $classb;
public $classc;
public function __construct($classb, $classc)
{
$this->classb = $classb;
$this->classc = $classc;
}
}
Eğer nesne oluşturmak her aşağıdaki kodu yapmak zorunda güvenmek istemem
$obj = new ClassA(new ClassB, new Class C);
Biz bizim için dikkat çekmek için bir fabrika tanımlamak içeri fabrika geleceğini nerede olduğunu:
class Factory{
public function build()
{
$classc = $this->buildC();
$classb = $this->buildB();
return $this->buildA($classb, $classc);
}
public function buildA($classb, $classc)
{
return new ClassA($classb, $classc);
}
public function buildB()
{
return new ClassB;
}
public function buildC()
{
return new ClassC;
}
}
Şimdi yapmamız gereken tek şey
$factory = new Factory;
$obj = $factory->build();
Eğer sınıfını değiştirmek istediğiniz zaman gerçek bir avantajdır. Biz farklı bir ClassC geçmek istedim Diyelim:
class Factory_New extends Factory{
public function buildC(){
return new ClassD;
}
}
ya da yeni bir ClassB:
class Factory_New2 extends Factory{
public function buildB(){
return new ClassE;
}
}
Şimdi sınıfların farklı bir dizi koymak için, kolayca sınıf oluşturulur nasıl değiştirmek için miras kullanabilirsiniz.
Iyi bir örnek bu kullanıcı sınıfı olabilir:
class User{
public $data;
public function __construct($data)
{
$this->data = $data;
}
}
Bu sınıfta $data
bizim veri depolamak için kullanabileceğiniz sınıftır. Şimdi bu sınıf için, bizim veri depolamak için bir oturum kullanmak Diyelim ki. Fabrika, bu gibi görünecektir:
class Factory{
public function build()
{
$data = $this->buildData();
return $this->buildUser($data);
}
public function buildData()
{
return SessionObject();
}
public function buildUser($data)
{
return User($data);
}
}
Şimdi, yerine biz veritabanındaki tüm verilerin saklamak istiyorum Diyelim ki, bunu değiştirmek gerçekten çok basittir:
class Factory_New extends Factory{
public function buildData()
{
return DatabaseObject();
}
}
Fabrikalar biz birlikte nesneleri koymak nasıl denetlemek için kullanın ve doğru fabrika kalıplarını kullanarak bize ihtiyacımız özelleştirilmiş nesneleri oluşturmak için olanak sağlayan bir tasarım deseni vardır.
Aslında ben sadece başladı bir blog sadece diğer gün birini kullanmak yerine ne zaman değil ne biri kadar anlatmaya çalıştım, ama. O da kod sadece fabrika ne, ama aynı zamanda ne zaman kullanılacağını bir örnek ile size göstereceğim çünkü ben burada yazı bağlayarak duyuyorum nedeni!
Practical use of the factory pattern, polymorphism and interfaces in PHP