Une brève introduction aux trois modes d'usine PHP

黄舟
Libérer: 2023-03-17 12:18:01
original
5468 Les gens l'ont consulté

Dans l'article précédent, nous vous avons présenté ce qu'est PHPle mode usine et pourquoi vous devriez utiliser le mode usine php. Aujourd'hui, nous allons présenter en détail les trois situations du mode usine php, à travers des exemples. analyser!

Modèle d'usine

Implémentation : définissez une interface pour créer des objets et laissez les sous-classes décider quelle classe instancier.
Scénarios d'application : il existe de nombreuses sous-classes et elles seront étendues, et la méthode de création est plus compliquée.

Les modèles d'usine sont divisés en trois types : usine simple, méthode d'usine et usine abstraite.

La différence entre les trois types d'usines est que l'usine abstraite a plusieurs lignes de produits, tandis que la La méthode factory n'a qu'une seule ligne de produits, est une simplification de l'usine abstraite. La méthode factory est opposée à la méthode factory simple. À première vue, il semble que la méthode factory ajoute beaucoup de code mais implémente les mêmes fonctions que la méthode factory simple. Mais l'essentiel est que l'usine simple ne suit pas strictement le principe d'ouverture et de fermeture du modèle de conception Lorsque de nouveaux produits doivent être ajoutés, le code de l'usine doit également être modifié. Cependant, la méthode d'usine adhère strictement au principe d'ouverture et de fermeture. Le mode n'est responsable que de l'interface d'usine abstraite, et l'extension de l'usine spécifique est laissée au client. Lors de la division du travail, les ingénieurs de base sont responsables de la définition des usines abstraites et des produits abstraits, et les ingénieurs commerciaux sont responsables de la mise en œuvre d'usines et de produits spécifiques. Tant que la couche d’abstraction est bien conçue, le framework est très stable.

Le code est le suivant :

/**
 * 工厂模式
 */
//抽象产品
interface Person {
    public function getName(); 
}
//具体产品实现
class Teacher implements Person {
    function getName() {
        return "老师n";
    }
}
class Student implements Person {
    function getName() {
        return "学生n";
    }
}
//简单工厂
class SimpleFactory {
       public static function getPerson($type) {
              $person = null;
              if ($type == 'teacher') {
                     $person = new Teacher();
              } elseif ($type == 'student') {
                     $person = new Student();
              }
              return $person;
       }
}
//简单工厂调用
class SimpleClient {
       function main() {
              // 如果不用工厂模式,则需要提前指定具体类
              // $person = new Teacher();
              // echo $person->getName();
              // $person = new Student();
              // echo $person->getName();
              // 用工厂模式,则不需要知道对象由什么类产生,交给工厂去决定
              $person = SimpleFactory::getPerson('teacher');
              echo $person->getName();
              $person = SimpleFactory::getPerson('student');
              echo $person->getName();
       }
}
//工厂方法
interface CommFactory {
    public function getPerson();
}
//具体工厂实现
class StudentFactory implements CommFactory {
    function getPerson(){
        return new Student();
    }
}
class TeacherFactory implements CommFactory {
    function getPerson() {
        return new Teacher();
    }
}
//工厂方法调用
class CommClient {
    static function main() {
           $factory = new TeacherFactory();
           echo $factory->getPerson()->getName();
           $factory = new StudentFactory();
           echo $factory->getPerson()->getName();
    }
}
//抽象工厂模式另一条产品线
interface Grade {
       function getYear();
}
//另一条产品线的具体产品
class Grade1 implements Grade {
       public function getYear() {
              return '2003级';
       }
}
class Grade2 implements Grade {
       public function getYear() {
              return '2004级';
       }
}
//抽象工厂
interface AbstractFactory {
       function getPerson();
       function getGrade();
}
//具体工厂可以产生每个产品线的产品
class Grade1TeacherFactory implements AbstractFactory {
       public function getPerson() {
              return new Teacher();
       }
       public function getGrade() {
              return new Grade1();
       }
}
class Grade1StudentFactory implements AbstractFactory {
       public function getPerson() {
              return new Student();
       }
       public function getGrade() {
              return new Grade1();
       }
}
class Grade2TeacherFactory implements AbstractFactory {
       public function getPerson() {
              return new Teacher();
       }
       public function getGrade() {
              return new Grade2();
       }
}
//抽象工厂调用
class FactoryClient {
       function printInfo($factory) {
              echo $factory->getGrade()->getYear().$factory->getPerson()->getName();
       }
       function main() {
              $client = new FactoryClient();
              $factory = new Grade1TeacherFactory();
              $client->printInfo($factory);
              $factory = new Grade1StudentFactory();
              $client->printInfo($factory);
              $factory = new Grade2TeacherFactory();
              $client->printInfo($factory);
       }
}
//简单工厂
//SimpleClient::main();
//工厂方法
//CommClient::main();
//抽象工厂
FactoryClient::main();
Copier après la connexion

Résumé :

Avez-vous découvert le mode usine PHP à travers les exemples détaillés dans cet article ? , n'est-ce pas assez simple ? J'espère que cela vous sera utile !

Recommandations associées :

Qu'est-ce que le modèle d'usine php ? Pourquoi utiliser le mode usine php ?

Explication détaillée des trois formes d'exemple de code du mode usine PHP

Exemples d'utilisation de PHP Résumé du mode usine

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!