Voici ce que I'am essayer d'atteindre:
- ce un analyseur de fichier texte
- en fonction des premiers caractères que je crée l'objet analyseur correct
- Je veux le faire en utilisant le modèle d'usine droite
- pourriez-vous me dire si mon code ci-dessous correspond correctement au modèle d'usine?
- Merci! :-)
Cette méthode d'usine est-elle la bonne pour ce que j'essaie de faire?
class Parser { protected $src; public function __construct($src) { $this->src = $src; } } class Format1Parser extends Parser { public function Parse() { // Parsing format 1 // ... } } class Format2Parser extends Parser { public function Parse() { // Parsing format 2 // ... } } class ParserFactory { public static function GetParser($src) { $header = substr($src,0,7); if ($header == "format1") { return(new Format1Parser($src)); } if ($header == "format2") { return(new Format2Parser($src)); } return(false); } } $parser = ParserFactory::GetParser(file_get_contents("file.txt")); $parser->Parse();
Merci pour votre réponse. En effet, le code est meilleur que vous l'avez fait. Mais ma question n'était pas bonne. Le bon est "est-ce que mon code correspond correctement au modèle de méthode d'usine?", Et "est-ce qu'il y a un meilleur modèle pour faire ceci?" – Antoine
Eh bien, le but du modèle d'usine est de créer des classes d'un même type (Parser dans ce cas). Donc, votre implémentation est bonne. Comme je l'ai dit, vous devriez simplement changer votre classe 'Parser' en une classe abstraite, pour éviter les erreurs d'exécution. – netcoder