110 votes

Ce qui est un modèle de conception Factory en PHP ?

Cela me confond, en termes plus simples que faut-il faire ? Faites ce que vous expliquez à votre mère ou quelqu'un presque s’il vous plaît.

196voto

Tyler Carter Points 30030

Une usine qui fabrique un objet. Donc, si vous voulez construire

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

Vous ne voulez pas compter sur d'avoir à faire le code suivant à chaque fois que vous créez l'objet

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

C'est là que l'usine allait venir. Nous définissons une usine pour prendre soin de cela pour nous:

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;
    }
}

Maintenant, tout ce que nous avons à faire est de

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

Le réel avantage est que si vous voulez changer la classe. Disons que nous avons voulu transmettre dans un autre ClassC:

class Factory_New extends Factory{
    public function buildC(){
        return new ClassD;
    }
}

ou une nouvelle ClassB:

class Factory_New2 extends Factory{
    public function buildB(){
        return new ClassE;
    }
}

Maintenant, nous pouvons utiliser l'héritage de modifier facilement la façon dont la classe est créée, à mettre dans un autre ensemble de classes.

Un bon exemple peut être de cette classe d'utilisateur:

class User{
    public $data;
    public function __construct($data)
    {
        $this->data = $data;
    }
}

Dans cette catégorie, $data , c'est la classe que nous utilisons pour stocker nos données. Maintenant, pour cette classe, permet de dire que nous utilisons une Session pour stocker nos données. L'usine devrait ressembler à ceci:

class Factory{
    public function build()
    {
        $data = $this->buildData();
        return $this->buildUser($data);
    }

    public function buildData()
    {
        return SessionObject();
    }

    public function buildUser($data)
    {
        return User($data);
    }
}

Maintenant, permet de dire à la place que nous voulons pour stocker l'ensemble de nos données dans la base de données, il est très simple de le changer:

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

Les usines sont un motif de conception que nous utilisons pour contrôler la façon dont nous mettre ensemble des objets, et à l'utilisation correcte de l'usine de modèles nous permet de créer des objets personnalisés dont nous avons besoin.

21voto

alex Points 186293

Comme une usine de la vraie vie, il crée quelque chose et le retourne.

Imaginez quelque chose comme ça

ou une méthode de fabrique

La mise en œuvre de la méthode de fabrique créera une nouvelle instance et retournez-le.

3voto

sbrbot Points 939

Classique de l'instanciation d'un objet est:

$Object=new Class();

PHP a la capacité de créer dynamiquement un objet à partir du nom de la variable à l'aide de la syntaxe suivante:

$Object=new $name;

où $nom contient le nom de la classe que l'on veut instancier.

Classique objet d'affacturage ressemblerait à:

function getInstance($class)
{
  if($class==='Customer')
  {
    $Object=new Customer();
  }
  elseif($class==='Product')
  {
    $Object=new Product();
  }
  return $Object;
}

et si vous appelez getInstance ("Produit") la fonction de cette usine permettra de créer et de retourner le Produit objet.

Il n'y a pas besoin de plus, on peut envoyer des "Produit" ou "Custome" comme valeur de la variable pour la dynamique de l'instanciation:

$name='Product';
$Object=new $name; //this will instantiate new Product()

1voto

N Zhang Points 54

Modèle de conception d’usine (Pattern Factory) est à couplage lâche. Comme le sens de l’usine, données à l’usine (produits de données) à l’utilisateur final. De cette façon, l’usine a casser le couplage étroit entre la source de données et de processus de données.

1voto

Pindatjuh Points 6929

En général, une « usine » produit quelque chose : dans le cas de l’objet--programmation orientée, un « modèle de conception d’usine » produit des objets.

Il n’est pas grave si c’est en PHP, c# ou tout autre langage orienté-objet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X