SORU
18 Ocak 2010, PAZARTESİ


PHP Fabrika Tasarım Deseni nedir?

Bu kafamı karıştırdı, en basit açısından ne işe yarar? Annen ya da neredeyse birisi lütfen açıklama yaptığını hayal et.

CEVAP
18 Ocak 2010, PAZARTESİ


Bir fabrika bir nesne oluşturur. Eğer inşa etmek isterseniz buyurun

 class A{
    public $classb;
    public $classc;
    public function __construct($classb, $classc)
    {
         $this->classb = $classb;
         $this->classc = $classc;
    }
  }

Nesnesi oluşturmak için aşağıdaki kodu her seferinde yapmak zorunda güvenmek istemezsin

$obj = new ClassA(new ClassB, new Class C);

Bu fabrikada gelecek yerdir. Biz bizim için bunu dikkat çekmek için bir fabrika tanımlayın:

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 şeydir

$factory = new Factory;
$obj     = $factory->build();

Gerçek avantajı, sınıf değiştirmek istediğinizde. Farklı bir ClassC geçmek istedik 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 miras sınıfı, sınıflar farklı bir dizi koymak için oluşturulur nasıl kolayca değiştirmek için kullanabiliriz.

İyi 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 verilerimizi saklamak için kullandığımız sınıftır. Bu sınıf için artık, hadi bizim veri depolamak için bir Oturum kullanmak demek. 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, izin veritabanında elimizdeki tüm verileri saklamak istediğimiz yerine, çok basit değiştirmek için olduğunu söyler:

class Factory_New extends Factory{
    public function buildData()
    {
        return DatabaseObject();
    }
}

Fabrika nesneleri bir araya getirmeyi nasıl kontrol etmek için kullandığımız bir tasarım deseni vardır, ve doğru fabrika desenler kullanarak bize ihtiyacımız olan özel nesneleri oluşturmak için izin verir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CMTelly

    CMTelly

    2 Mayıs 2007
  • monkophile

    monkophile

    25 Temmuz 2007
  • NikkoNantone

    NikkoNantone

    21 Kasım 2011