Maison  >  Article  >  développement back-end  >  Modèles de conception avancés orientés objet PHP : exemples d'utilisation de modèles d'usine

Modèles de conception avancés orientés objet PHP : exemples d'utilisation de modèles d'usine

巴扎黑
巴扎黑original
2017-05-22 14:06:181586parcourir

La plus grande instruction switch/case que j'ai jamais vue dans un programme orienté objet comportait plus de 20 conditions. Pendant l'exécution, ce module de code exécute toutes les conditions à chaque fois. Chaque condition est responsable de la création d'un nouvel objet, utilisé pour communiquer avec les utilisations externes de l'API de l'application. Après avoir effectué un dépannage général sur l'un d'eux, j'ai commencé à m'intéresser aux interfaces implémentées par l'application. À ma grande surprise, chaque classe référencée dans l'instruction switch/case implémente la même interface ! Lors de l'ajout ultérieur de nouvelles instructions conditionnelles à l'instruction switch/case, je recommande d'utiliser plutôt le modèle d'usine.

Qu'est-ce que le modèle d'usine ?

Le modèle de conception d'usine fournit une interface pour obtenir une nouvelle instance d'un objet tout en permettant au code appelant d'éviter de déterminer les étapes pour instancier réellement la classe de base.

À mesure que PHP se développe et évolue vers un langage, ses fonctionnalités continuent de fournir des moyens de développement simples grâce à l'application de modèles de conception éprouvés. Une fonctionnalité particulièrement utile de PHP est la possibilité de créer de nouvelles instances d'une classe basées sur le contenu des variables. Cette méthode dynamique d'instanciation d'objet est une approche de création de blocs de code pour implémenter le modèle de conception Factory en PHP.

Les classes basées sur le modèle de conception d'usine aident à réduire la complexité basée sur les conditions dans le flux de code principal. Tout au long d’une application, les objets sont appelés de nombreuses manières différentes. Toute modification liée à la création d'un objet affecte le reste de l'application. Supposons que vous instanciiez l'un des 5 objets pour compléter certaines fonctionnalités. Créer des instructions conditionnelles pour déterminer quels objets sont instanciés est une approche. Les instructions conditionnelles peuvent être des instructions if/else complexes ou des instructions switch/case. Cette fonctionnalité peut être utilisée à de nombreux endroits de l’application, mais entraîne un code en double. Ensuite, si un sixième objet est ajouté ou si le nom de l'un des cinq objets existants est modifié, alors toutes les instances du code du programme doivent être modifiées et testées à nouveau. Le modèle de conception d'usine permet d'éviter ce casse-tête en fournissant une interface simple pour créer les objets ci-dessus. Que l'objet soit modifié ou que d'autres objets soient ajoutés, l'objet Factory est toujours appelé de la même manière. L'affichage d'une entrée de blog est une instance d'affichage.

La création de différents objets n'est pas le seul objectif de l'utilisation du modèle de conception d'usine. Un autre cas d'utilisation des classes basées sur le modèle de conception Factory concerne l'utilisation de collections d'éléments. Dans ce cas, la collection d'objets contient le même objet de base, mais chaque objet possède des caractéristiques différentes.

Lorsque plusieurs étapes sont nécessaires pour déterminer le type d'objet à créer, il est préférable d'utiliser une classe basée sur le modèle de conception d'usine pour récupérer de nouvelles instances.

UML

Ce diagramme UML détaille une conception de classe utilisant le modèle de conception d'usine.

Modèles de conception avancés orientés objet PHP : exemples dutilisation de modèles dusine

Ce qui suit est une description de l'image ci-dessus :

1 Les deux classes de base existantes sont MyObjectTyepA et MyObjectTyepB. Les deux mines ont une méthode publique appelée doSomething(), qui exécute une logique spécifique à un objet à sa manière. Les interfaces publiques et les types de retour des deux classes de base sont exactement les mêmes.

2. La classe MyObjectFactory est utilisée pour créer une instance de l'une des classes de base ci-dessus et la renvoyer au flux de code. Il possède une méthode publique appelée createObject(), qui accepte un type de paramètre, ce qui permet de déterminer quelle instance de la classe de base doit être créée. Par la suite, la méthode createObject() renvoie une instance de la classe de type demandée.

Exemples d'utilisation du modèle d'usine de modèle de conception PHP

<?php
/*
* 每日练习 PHP设计模式工厂模式的使用方法
* PHP工厂模式不难理解,顾名思义,就是一个加工厂,然后工厂是制造产品的,只要制造产品
* 就必须有几个要素:"方法","模型","工厂车间"。
*/
/*第一种示例 普通工厂模式
* */
abstract class model {//产品模型
abstract function getNames();
}
class zhangsan extends model {//产品实例
function getNames(){
return "my name is zhengsan";
}
}
class lisi extends model{//产品实例
function getNames(){
return "my name is lisi";
}
}
abstract class gongchangModel {//工厂模型
abstract function getZhangsan();
abstract function getLisi();
}
class gongchang extends gongchangModel{//工厂实例
function getZhangsan(){
return new zhangsan();
}
function getLisi(){
return new lisi();
}
}
$gongchang=new gongchang();//实例化工厂
$zhangsan=$gongchang->getZhangsan();//制造产品
echo $zhangsan->getNames();//产品输出功能
?>

J'ai déjà écrit un article sur le modèle de conception d'usine. En fait, le modèle d'usine comprend le modèle d'usine ordinaire et le modèle d'usine abstrait. , mais, quel que soit leur modèle d'usine, ils ont tous une fonction, celle de générer des objets.

D'accord, utilisons l'exemple le plus simple ci-dessous pour démontrer le modèle d'usine dans le modèle de conception PHP.

J'ai résumé les trois éléments du modèle d'usine :

1. Modèle de produit

2. Exemples de produits

3.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn