Le motif factory

Définition

Ce motif permet la création d’objets par le biais d’une fabrique, qui elle même fera appel a des fabriques dites concrètes.

Principe

Découpler l’objet utilisateur de l’objet fabriquant rend le mode d’instanciation plus souple. On ne se soucie plus de la façon de créer un objet… Le motif fabrication utilise l’héritage

L’exemple par le code

Créons d’abord deux fabriques, l’une pour fabriquer un parser de texte au format Wiki et une autre pour fabriquer un parser de texte au format HTML.

 module ParserFactory
   attr_reader :type, :parser
 end
 class WikiFactory 
   include ParserFactory
   def initialize
     @type = "Wiki" 
     @parser = WikiParser.new
   end
 end
 class HtmlFactory 
   include ParserFactory
   def initialize
     @type = "HTML" 
     @parser = HtmlParser.new
   end
 end

Ensuite nous allons mettre en place nos deux parseurs.

 class Parser
   def parse( source )
     return nil
   end
 end
 class WikiParser < Parser
   def parse( source )
     return "Je parse très bien le langage wiki" 
   end
 end
 class HtmlParser < Parser
   def parse( source )
     return "Je parse très bien le HTML" 
   end
 end

Testons maintenant nos objets

 wiki_factory = WikiFactory.new
 print wiki_factory.type                           # -> Wiki
 p wiki_factory.parser                             # -> #<WikiParser:0xb7d0fbc0>
 print wiki_factory.parser.parse("source wiki")    # -> Je parse très bien le langage wiki
 print "\n" 
 html_factory = HtmlFactory.new
 print html_factory.type                           # -> HTML
 p html_factory.parser                             # -> #<HtmlParser:0xb7d0fb34>
 print html_factory.parser.parse("source html")    # -> >Exit code: 0