recherche
Maisondéveloppement back-endtutoriel phpExplication détaillée du modèle de création de modèle de conception PHP

Cet article présente principalement le mode constructeur dans le mode conception PHP et utilise PHP pour implémenter le mode constructeur. Les amis intéressés peuvent s'y référer. J'espère que cela aide tout le monde.

Le mode Constructeur peut séparer la représentation interne d'un produit du processus de production du produit, afin que des produits avec des représentations internes différentes puissent être générés.
1. Diagramme de structure du mode Constructeur

2. Rôles principaux
Rôle de constructeur abstrait (Builder) : Définir une interface abstraite pour standardiser la construction de chaque composant du produit (c'est-à-dire standardiser la méthode d'implémentation du constructeur spécifique ). Les méthodes spécifiées doivent inclure des méthodes de construction et des méthodes de retour de résultats
Rôle Concrete Builder (ConcreteBuilder) : Implémenter les méthodes définies par le rôle de constructeur abstrait. Le constructeur spécifique est étroitement lié à la logique métier. L'application finira par créer le produit selon la logique métier en appelant la méthode de construction implémentée dans ce rôle. Une fois la construction terminée, l'instance de produit construite sera renvoyée via le résultat. méthode. Généralement créé en externe par un client ou une usine abstraite.
Rôle de directeur : Le rôle de ce rôle est d'appeler le rôle de constructeur spécifique pour créer des produits. Le réalisateur n'a pas de relation directe avec la catégorie de produit. C'est un rôle concret et abstrait qui parle à la catégorie de produit.
Rôle produit : L'objet complexe créé par le constructeur sous la direction du directeur
Le rôle de directeur traite directement avec le client, il comprend la logique métier du client, divise la demande du client pour créer un produit dans des demandes de composants de produit, puis appelez des rôles de produit spécifiques pour effectuer l'opération de génération. Cela sépare le client du constructeur de béton.
3. Avantages et inconvénients du modèle Builder
Avantages du modèle Builder : Le modèle Builder peut très bien séparer l'implémentation d'un objet de la logique "métier" associée Open, donc qu'il peut être très facile d'ajouter (ou de modifier) ​​l'implémentation sans modifier la logique des événements.
Inconvénients du pattern Builder : La modification de l'interface du builder entraînera une modification de toutes les classes d'exécution.
4. Scénarios d'utilisation et effets du mode Builder
Le mode Builder doit être utilisé dans les situations suivantes :
1. a une structure interne complexe.
2. Les propriétés des objets produit qui doivent être générés dépendent les unes des autres et le modèle de générateur peut forcer l'ordre de génération.
3. Dans le processus de création d'objets, certains autres objets du système seront utilisés, qui ne sont pas faciles à obtenir lors de la création d'objets produits.
L'utilisation du mode constructeur a principalement les effets suivants :
1. L'utilisation du mode constructeur permet de changer indépendamment l'apparence interne du produit. L'utilisation du modèle de construction élimine le besoin pour le client de connaître les détails de la composition interne du produit.
2. Chaque Constructeur est relativement indépendant et n'a rien à voir avec les autres Constructeurs.
3. Le produit final construit par le modèle est plus facile à contrôler.
5. Mode constructeur et autres modes
Mode usine abstraite (mode usine abstraite) : Dans le mode usine abstraite, chaque objet d'usine Lorsque appelé, un objet produit complet est renvoyé et le client peut ou non assembler ces produits en un produit plus grand et plus complexe. Le modèle de constructeur est différent. Il construit un produit complexe pièce par pièce, et le processus d'assemblage de ce produit se déroule à l'intérieur du constructeur. La différence entre les deux réside dans la question de savoir s’il existe un processus d’assemblage et où se déroule le processus d’assemblage. Ces deux modèles de conception peuvent être utilisés ensemble. En appelant un rôle de construction, le client appelle indirectement un autre rôle d'usine dans le modèle d'usine abstrait. Le mode Usine renvoie les pièces de différentes familles de produits, tandis que le mode Constructeur les assemble.

Mode stratégie : Le mode constructeur est très proche du mode stratégie en termes de structure. En fait, le mode constructeur est un cas particulier du mode stratégie. La différence entre les deux réside dans leurs intentions différentes. Le modèle de construction fonctionne sur le client pour créer de nouveaux objets petit à petit, tandis que le but du modèle de stratégie est de fournir une interface abstraite pour l'algorithme.

Mode constructeur et mode méthode modèle : Une fois que le mode constructeur a dégénéré et perdu le rôle de directeur, il peut se développer en mode méthode modèle (c'est-à-dire placer l'implémentation de l'algorithme de la construction processus dans le rôle de construction) ).

Modèle de constructeur et modèle de composition : le modèle de composition décrit la structure de composition d'une arborescence d'objets, tandis que le modèle de constructeur peut être utilisé pour décrire le processus de génération de l'arborescence d'objets.
Les 4 points ci-dessus proviennent de "Java et Patterns"
6. Exemple PHP en mode Builder

<?php
/**
 * 产品
 * 此处仅以一个产品类中的字符串演示产品
 */
class Product {                          
 /**
 * 产品的组成部分集合
 */
 private $_parts;
 
 public function __construct() {
 $this->_parts = array();
 }
 
 public function add($part) {
 return array_push($this->_parts, $part);
 }
 
 public function show() {
 echo "the product include:";
 array_map(&#39;printf&#39;, $this->_parts);
 }
}
 
/**
 * 抽象建造者 
 */
abstract class Builder {
 
 /**
 * 产品零件构造方法1
 */
 public abstract function buildPart1();
 
 
 /**
 * 产品零件构造方法2
 */
 public abstract function buildPart2();
 
 
 /**
 * 产品返还方法
 */
 public abstract function getResult();
}
 
/**
 * 具体建造者
 */
class ConcreteBuilder extends Builder {
 
 private $_product;
 
 public function __construct() {
 $this->_product = new Product();
 }
 
 public function buildPart1() {
 $this->_product->add("Part1");
 }
 
 public function buildPart2() {
 $this->_product->add("Part2");
 }
 
 public function getResult() {
 return $this->_product;
 }
}
 
/**
 * 导演者
 */
class Director {
 
 public function __construct(Builder $builder) {
 $builder->buildPart1();
 $builder->buildPart2();
 }
}
 
 
 
class Client {
 
 /**
 * Main program.
 */
 public static function main() {
 $buidler = new ConcreteBuilder();
 $director = new Director($buidler);
 $product = $buidler->getResult();
 $product->show();
 }
 
}
 
Client::main();
?>

Recommandations associées :

Explication détaillée du modèle d'adaptateur du modèle de conception PHP

Explication détaillée du modèle d'itérateur dans les modèles de conception PHP

Explication détaillée du modèle de décorateur dans les modèles de conception PHP

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
Comment pouvez-vous vérifier si une session PHP a déjà commencé?Comment pouvez-vous vérifier si une session PHP a déjà commencé?Apr 30, 2025 am 12:20 AM

Dans PHP, vous pouvez utiliser session_status () ou session_id () pour vérifier si la session a commencé. 1) Utilisez la fonction session_status (). Si php_session_active est retourné, la session a été lancée. 2) Utilisez la fonction session_id (), si une chaîne non vide est renvoyée, la session a été démarrée. Les deux méthodes peuvent vérifier efficacement l'état de session et le choix de la méthode à utiliser dépend de la version PHP et des préférences personnelles.

Décrivez un scénario où l'utilisation de sessions est essentielle dans une application Web.Décrivez un scénario où l'utilisation de sessions est essentielle dans une application Web.Apr 30, 2025 am 12:16 AM

SessionsaRevitalInWebapplications, en particulier pour le commerce de commerce.

Comment pouvez-vous gérer l'accès simultané à la session en PHP?Comment pouvez-vous gérer l'accès simultané à la session en PHP?Apr 30, 2025 am 12:11 AM

La gestion de l'accès simultané sur la session en PHP peut être effectuée par les méthodes suivantes: 1. Utilisez la base de données pour stocker les données de session, 2. Utilisez Redis ou Memcached, 3. Implémentez une stratégie de verrouillage de session. Ces méthodes aident à garantir la cohérence des données et à améliorer les performances de la concurrence.

Quelles sont les limites de l'utilisation de sessions PHP?Quelles sont les limites de l'utilisation de sessions PHP?Apr 30, 2025 am 12:04 AM

PhpSessionShaveSeverallimitations: 1) StorageConstraintsCanleadToperformanceIssues; 2) SecurityVulnerAbilitiesLikeSessionFixationAttackSexist; 3) ScaliabilityShalngingDuetoServer-SpecificStorage; 4) SessionxpirationManagementCanBeproblematic; 5) DatapeSisSis irest;

Expliquez comment l'équilibrage de charge affecte la gestion des sessions et comment y remédier.Expliquez comment l'équilibrage de charge affecte la gestion des sessions et comment y remédier.Apr 29, 2025 am 12:42 AM

L'équilibrage de charge affecte la gestion de la session, mais peut être résolu avec la réplication de la session, l'adhérence des sessions et le stockage centralisé de session. 1. Session Replication Copy Données de session entre les serveurs. 2. Session Stickleness dirige les demandes d'utilisateurs vers le même serveur. 3. Le stockage centralisé de session utilise des serveurs indépendants tels que Redis pour stocker les données de session pour assurer le partage de données.

Expliquez le concept de verrouillage des sessions.Expliquez le concept de verrouillage des sessions.Apr 29, 2025 am 12:39 AM

Session BlockingSateChnique utilisétoenSureAuser'sessionremainSexclusiVetoonUseratatime.ITCUCIALFORPREVERSDATACORUPRUPTIONANDSECRYSEURCHEBRESSInMulti-userApplications.SessionLockingisImplementEdUsingServer-SidelockingMechanisms, telasreentrantLockinjj

Y a-t-il des alternatives aux séances PHP?Y a-t-il des alternatives aux séances PHP?Apr 29, 2025 am 12:36 AM

Les alternatives aux séances PHP comprennent des cookies, une authentification basée sur des jetons, des sessions basées sur la base de données et Redis / Memcached. 1.CooKies Gérer les sessions en stockant des données sur le client, ce qui est simple mais faible en sécurité. 2. L'authentification basée sur le token utilise des jetons pour vérifier les utilisateurs, ce qui est hautement sécurisé mais nécessite une logique supplémentaire. 3.Database basée sur les séances stocke les données dans la base de données, qui a une bonne évolutivité mais peut affecter les performances. 4. redis / memcached utilise un cache distribué pour améliorer les performances et l'évolutivité, mais nécessite une correspondance supplémentaire

Définissez le terme «détournement de session» dans le contexte de PHP.Définissez le terme «détournement de session» dans le contexte de PHP.Apr 29, 2025 am 12:33 AM

SessionHijacking fait référence à un attaquant imitant un utilisateur en obtenant le SessionID de l'utilisateur. Les méthodes de prévention comprennent: 1) le chiffrement de la communication à l'aide de HTTPS; 2) Vérification de la source du sessionID; 3) Utilisation d'un algorithme de génération de sessionID sécurisé; 4) Mise à jour régulière du SessionID.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

DVWA

DVWA

Damn Vulnerable Web App (DVWA) est une application Web PHP/MySQL très vulnérable. Ses principaux objectifs sont d'aider les professionnels de la sécurité à tester leurs compétences et leurs outils dans un environnement juridique, d'aider les développeurs Web à mieux comprendre le processus de sécurisation des applications Web et d'aider les enseignants/étudiants à enseigner/apprendre dans un environnement de classe. Application Web sécurité. L'objectif de DVWA est de mettre en pratique certaines des vulnérabilités Web les plus courantes via une interface simple et directe, avec différents degrés de difficulté. Veuillez noter que ce logiciel

VSCode Windows 64 bits Télécharger

VSCode Windows 64 bits Télécharger

Un éditeur IDE gratuit et puissant lancé par Microsoft

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

mPDF

mPDF

mPDF est une bibliothèque PHP qui peut générer des fichiers PDF à partir de HTML encodé en UTF-8. L'auteur original, Ian Back, a écrit mPDF pour générer des fichiers PDF « à la volée » depuis son site Web et gérer différentes langues. Il est plus lent et produit des fichiers plus volumineux lors de l'utilisation de polices Unicode que les scripts originaux comme HTML2FPDF, mais prend en charge les styles CSS, etc. et présente de nombreuses améliorations. Prend en charge presque toutes les langues, y compris RTL (arabe et hébreu) ​​et CJK (chinois, japonais et coréen). Prend en charge les éléments imbriqués au niveau du bloc (tels que P, DIV),