Fabrique abstraite (patron de conception) - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Exemples

C++

       /* exemple d'une fabrique abstraite d'eléments d'IHM en C++ */             class Button {        virtual void paint() = 0;      };             class WinButton : public Button {        void paint (){          std::cout << " I'm a window button \n";        }      };             class OSXButton : public Button {        void paint (){          std::cout << " I'm a OSX button \n";        }      };             class GUIFactory {        virtual Button* createButton () = 0;      };             class WinGUIFactory : public GUIFactory {        Button* createButton (){          return new WinButton();        }      };             class OSXGUIFactory : public GUIFactory {        Button* createButton (){          return new OSXButton();        }      };             class Application {          Application(GUIFactory* factory){              Button * button = factory->createButton();              button->paint();          }      };             /* application: */             int main()      {        GUIFactory* factory1 = new WinGUIFactory();        GUIFactory* factory2 = new OSXGUIFactory();               Application* winApp  = new Application (factory1);         Application* osxApp  = new Application (factory2);               delete factory1, factory2;               return 0;      }      

C#

      /*       * GUIFactory example       */              abstract class GUIFactory {           public static GUIFactory getFactory() {               int sys = readFromConfigFile("OS_TYPE");               if (sys==0) {                   return(new WinFactory());               } else {                   return(new OSXFactory());               }          }          public abstract Button createButton();       }              class WinFactory:GUIFactory {           public override Button createButton() {               return(new WinButton());           }       }              class OSXFactory:GUIFactory {           public override Button createButton() {               return(new OSXButton());           }       }              abstract class Button  {           public string caption;           public abstract void paint();       }              class WinButton:Button {           public override void paint() {              Console.WriteLine("I'm a WinButton: "+caption);           }       }              class OSXButton:Button {           public override void paint() {              Console.WriteLine("I'm a OSXButton: "+caption);           }       }              class Application {           static void Main(string[] args) {               GUIFactory aFactory = GUIFactory.getFactory();               Button aButton = aFactory.createButton();               aButton.caption = "Play";               aButton.paint();           }           //output is           //I'm a WinButton: Play           //or           //I'm a OSXButton: Play       }      

VB.Net

      '      ' * GUIFactory example      '       MustInherit Class GUIFactory          Public Shared Function getFactory() As GUIFactory              Dim sys As Integer = readFromConfigFile("OS_TYPE")              If sys = 0 Then                  Return (New WinFactory())              Else                  Return (New OSXFactory())              End If          End Function          Public MustOverride Function createButton() As Button      End Class      Class WinFactory          Inherits GUIFactory          Public Overloads Overrides Function createButton() As Button              Return (New WinButton())          End Function      End Class      Class OSXFactory          Inherits GUIFactory          Public Overloads Overrides Function createButton() As Button              Return (New OSXButton())          End Function      End Class      MustInherit Class Button          Public caption As String          Public MustOverride Sub paint()      End Class      Class WinButton          Inherits Button          Public Overloads Overrides Sub paint()              Console.WriteLine("I'm a WinButton: " & caption)          End Sub      End Class      Class OSXButton          Inherits Button          Public Overloads Overrides Sub paint()              Console.WriteLine("I'm a OSXButton: " & caption)          End Sub      End Class      Class Application          Private Shared Sub Main(ByVal args As String())              Dim aFactory As GUIFactory = GUIFactory.getFactory()              Dim aButton As Button = aFactory.createButton()              aButton.caption = "Play"              aButton.paint()          End Sub          'output is          'I'm a WinButton: Play          'or          'I'm a OSXButton: Play      End Class      

Java

       /*       * GUIFactory example       */              public abstract class GUIFactory {          public static GUIFactory getFactory() {               int sys = readFromConfigFile("OS_TYPE");               if (sys == 0) {                   return(new WinFactory());               } else {                   return(new OSXFactory());               }          }          public abstract Button createButton();       }              class WinFactory extends GUIFactory {           public Button createButton() {               return(new WinButton());           }       }              class OSXFactory extends GUIFactory {           public Button createButton() {               return(new OSXButton());           }       }              public abstract class Button  {           private String caption;           public abstract void paint();                  public String getCaption(){               return caption;           }           public void setCaption(String caption){               this.caption = caption;           }       }              class WinButton extends Button {           public void paint() {              System.out.println("I'm a WinButton: "+ getCaption());           }       }              class OSXButton extends Button {           public void paint() {              System.out.println("I'm a OSXButton: "+ getCaption());           }       }              public class Application {           public static void main(String[] args) {               GUIFactory aFactory = GUIFactory.getFactory();               Button aButton = aFactory.createButton();               aButton.setCaption("Play");               aButton.paint();           }           //output is           //I'm a WinButton: Play           //or           //I'm a OSXButton: Play       }      

Perl

       # GUIFactory example on Perl              package GUIFactory;              sub getFactory($$) {               shift; # skip class               my $toolkit = shift;               if ($toolkit eq 'GTK') {                   return(GtkFactory->new);               } else {                   return(TkFactory->new);               }       }              package GtkFactory;       use base 'GUIFactory';              sub new {           bless({}, shift);       }              sub createButton {               return(GtkButton->new);       }              package TkFactory;       use base 'GUIFactory';              sub new {               bless({}, shift);       }              sub createButton() {               return(TkButton->new);       }              package Button;              sub new {               $class = shift;               my $self = {};               $self{caption} = '';               bless($self, $class);               return $self;       }              package GtkButton;       use base 'Button';              sub paint() {              print "I'm a GtkButton\n";       }              package TkButton;       use base 'Button';              sub paint() {              print "I'm a TkButton\n";       }              package main;              my $aFactory = GUIFactory->getFactory;       my $aButton = $aFactory->createButton;       $aButton->{caption} = "Play";       $aButton->paint();      

PHP

      /*       * Fabrique abstraite       */      abstract class GUIFactory {          public static function getFactory() {              $sys = readFromConfigFile("OS_TYPE");              if ($sys == 0) {                  return(new WinFactory());              } else {                  return(new OSXFactory());              }          }          public abstract function createButton();      }             class WinFactory extends GUIFactory {          public function createButton() {              return(new WinButton());          }      }             class OSXFactory extends GUIFactory {          public function createButton() {              return(new OSXButton());          }      }             abstract class Button {          private $_caption;          public abstract function render();                 public function getCaption(){              return $this->_caption;          }          public function setCaption($caption){              $this->_caption = $caption;          }      }             class WinButton extends Button {          public function render() {              return "Je suis un WinButton: ".$this->getCaption();          }      }             class OSXButton extends Button {          public function render() {              return "Je suis un OSXButton: ".$this->getCaption();          }      }             $aFactory = GUIFactory::getFactory();      $aButton = $aFactory->createButton();      $aButton->setCaption("Démarrage");      echo $aButton->render();             //Le rendu est      //Je suis un WinButton: Démarrage      //ou      //Je suis un OSXButton: Démarrage      

Eiffel

       --       -- GUI Factory example       --       class GUI_FACTORY_FOR_CONFIG feature          get_factory: GUI_FACTORY is             once                inspect read_from_config_file("OS_TYPE")                when 0 then                   create {WIN_FACTORY} Result                else                   create {OSX_FACTORY} Result                end             end       end              deferred class GUI_FACTORY feature          create_button: BUTTON is deferred end       end              class WIN_FACTORY inherit GUI_FACTORY feature          create_button: WIN_BUTTON is do create Result end       end              class OSX_FACTORY inherit GUI_FACTORY feature          create_button: OSX_BUTTON is do create Result end       end              deferred class BUTTON feature          caption: STRING          set_caption(value: like caption) is do caption := value end          paint is deferred end       end              class WIN_BUTTON inherit BUTTON feature          paint is do print("I'm a WIN_BUTTON: "+caption+"%N") end       end              class OSX_BUTTON inherit BUTTON feature          paint is do print("I'm a OSX_BUTTON: "+caption+"%N") end       end              class APPLICATION inherit GUI_FACTORY_FOR_CONFIG creation main feature          main is local button : BUTTON do             button := get_factory.create_button             button.set_caption("Play")             button.paint          end       end      
Page générée en 0.079 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales
Version anglaise | Version allemande | Version espagnole | Version portugaise