PHP bir Factory Design Pattern nedir?

7 Cevap php

Bu en basit anlamda ne yapar bana, karıştırır? Eğer anne ya da birine açıklayan Pretend neredeyse lütfen.

7 Cevap

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.

Gerçek bir hayat fabrika gibi, bir şey oluşturur ve döndürür.

Böyle bir şey hayal edin

$joe = new Joe();
$joe->say('hello');

ya da bir fabrika yöntemi

Joe::Factory()->say('hello');

Fabrika yöntemin uygulanması yeni bir örneğini oluşturmak ve dönecektir.

Fabrika Tasarım Deseni (Fabrika Pattern) gevşek bağlantı içindir. Son kullanıcı için bir fabrika (veri üretmek) fabrika, verilerin anlam gibi. Bu arada, fabrika verileri bir kaynak ve veri süreci arasındaki sıkı bağlantı ara.

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

Bu cevap Daniel Beyaz fabrika deseni kullanarak MySQL bağlantısı oluşturmak için fabrika kullanmak bahsedilen diğer yazı ile ilgili olduğunu.

For MySQL connection I would rather use singleton pattern as you want to use same connection for accessing the database not create another one.

Genel olarak bir "fabrika" şey üretir: Nesne-Orientated-Programlama durumunda, bir "fabrika tasarım deseni" nesneler üretir.

PHP, C # veya herhangi başka bir nesne yönelimli bir dilde ise önemli değildir.

Bir fabrika sadece bir nesneyi veya nesneleri üretir.

Bir MySQL bağlantısı kuran bir fabrika olabilir.

http://en.wikipedia.org/wiki/Factory_method_pattern