Ankündigung

Einklappen
Keine Ankündigung bisher.

Frage zum Factory Design Pattern

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    jetzt muss ich nochmal nachfragen:
    welchen Vorteil hat die Attributklasse?
    "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

    Kommentar


    • #17
      Der Vorteil zur Vererbung ist, dass du um ein neues Attribut einzuführen deine Factory nicht erweitern musst und ebenso kein neues Objekt implementiert werden muss.
      Viele Grüße,
      Dr.E.

      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      1. Think about software design [B]before[/B] you start to write code!
      2. Discuss and review it together with [B]experts[/B]!
      3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
      4. Write [I][B]clean and reusable[/B][/I] software only!
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      Kommentar


      • #18
        Hallo,

        ich möchte anhand des Beispiels hier...

        PHP-Code:
        abstract class Product {
          public static function 
        factory($deviceType) {
            
        $class __CLASS__ "_" $deviceType;
            if (
        class_exists($class)) {
              return new 
        $class();
            }
            throw new 
        InvalidArgumentException("invalid device type");
          }
          public function 
        fromArray(array $data) {
            foreach (
        $data as $key => $value) {
              if (
        property_exists($this$key)) {
                
        $this->{$key} = $value;
              }
            }
          }
        }
        class 
        Product_Handy extends Product {
          public 
        $description;
          public static function 
        findById($id){}
        }
        class 
        Product_Navi extends Product {
          public 
        $title;
        }

        $product Product::factory('Handy'); 
        ... alle Daten eines Handys erhalten. Über die Factory bekomme ich das jeweilige Objekt, aber ich kann ja nun die statische Methode findById nicht aufrufen. Wie komme ich an alle Daten nun ran?

        Noch eine andere Frage:
        Wenn in den Suchergebnissen Handys und Navis enthalten sind, dann hat ja das Navi andere Methoden als das Handy. Ist es dann ok, wenn man die Methoden so aufruft:
        PHP-Code:
        switch($type){
          case 
        'Handy':
            
        $product->getDescription();
          break;

          case 
        'Navi':
            
        $product->getTitle();
          break;

        Kommentar


        • #19
          aber ich kann ja nun die statische Methode findById nicht aufrufen
          Dann solltest Du überlegen, warum sie statisch ist.
          Wenn in den Suchergebnissen Handys und Navis enthalten sind, dann hat ja das Navi andere Methoden als das Handy. Ist es dann ok, wenn man die Methoden so aufruft:
          Ich würde zwei Fabriken, also das Abstract Factory pattern verwenden.
          [COLOR="#F5F5FF"]--[/COLOR]
          [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
          [COLOR="#F5F5FF"]
          --[/COLOR]

          Kommentar


          • #20
            Zitat von nikosch Beitrag anzeigen
            Ich würde zwei Fabriken, also das Abstract Factory pattern verwenden.
            Aber ich muss ja trotzdem den Typ auswerten, um zu wissen, welche Methode ich aufrufen kann. Es gibt z.B. bei den Navis keine Methode getKamera()

            Kommentar


            • #21
              Dann kannst Du eigentlich auch kein gemeinsames Interface verwenden. Vielleicht eher sowas wie ein Key-Value-Store für generische Attribute.
              [COLOR="#F5F5FF"]--[/COLOR]
              [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
              [COLOR="#F5F5FF"]
              --[/COLOR]

              Kommentar

              Lädt...
              X