<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Objekt Fabriken]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>wenn ich die &quot;Object Factories&quot; richtig verstanden habe, kann ich mir mit ihrer Hilfe Objekte an Hand des Klassennamens, oder eine anderen eindeutigen Kennung erzeugen lassen.<br />
Der Factory muss nur die Kennung und der dazugehörige Datentyp bekannt sein und kann dann ein Objekt für mich erzeugen.<br />
Wichtig ist auch noch, das alle Datentypen eine gemeinsame Schnittstelle besitzen.<br />
Hoffentlich hab ich's bis jetzt richtig verstanden.</p>
<p>Also, hier hab ich mal zwei Klassen:<br />
eine Basis Klasse und eine davon abgeleitete.</p>
<pre><code class="language-cpp">class Base
{
   public:
      virtual void start(void) = 0;
}

class Derived : public Base
{
   public:
      // Implementiert die Methode der Basis Klasse
      virtual start(void);

      // Besitzt noch eine weitere Methode
      void setValue(int i);
};
</code></pre>
<p>Nun hab ich aber ein Verständnisproblem bei vollgendem Code:</p>
<pre><code class="language-cpp">int main(void)
{
   Basis *b = factory.createObject(&quot;Typkennung&quot;);
   b-&gt;start();
}
</code></pre>
<p>Meinem Programm ist's nun ziemlich egal, welche konkrete Klasse von der Factory geliefert wird, solange das Interface implementiert wird.<br />
Soweit ist's noch klar.<br />
Was mach ich aber mit sowas?</p>
<pre><code class="language-cpp">int main(void)
{
   Base *b = factory.createObject(&quot;Derived&quot;);

   // Das klappt nicht, da die Methode setValue kein Teil der Basisschnittstelle ist
   b-&gt;setValue(1);
}
</code></pre>
<p>Allerdings klappt das auch nicht</p>
<pre><code class="language-cpp">int main(void)
{
   Derived *b = factory.createObject(&quot;Derived&quot;);

   // Das klappt nicht, da die Methode createObject() der Factory nur den Basis Typ liefert 
   b-&gt;setValue(1);
}
</code></pre>
<p>Dann bliebe mir ja nur noch vollgendes:</p>
<pre><code class="language-cpp">int main(void)
{
   Derived *b = static_cast&lt;Derived*&gt;(factory.createObject(&quot;Derived&quot;));

   // Jetzt klappt's
   b-&gt;setValue(1);
}
</code></pre>
<p>Hab ich die Verwendung der Factories wirklich verstanden?<br />
Es hat natürlich Vorteile, wenn die Objekte nicht in meinem Programme direkt, sondern zentral angelegt werden.<br />
Allerdings lege ich micht mit dem <strong>static_cast</strong> doch auf einen Typ fest, oder nicht?</p>
<p>Vielleicht kann mir ja einer von euch einen Tipp für die Verwendung von Factories geben.<br />
Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/161330/objekt-fabriken</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 19:58:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/161330.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 05 Oct 2006 15:09:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Objekt Fabriken on Thu, 05 Oct 2006 15:09:07 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>wenn ich die &quot;Object Factories&quot; richtig verstanden habe, kann ich mir mit ihrer Hilfe Objekte an Hand des Klassennamens, oder eine anderen eindeutigen Kennung erzeugen lassen.<br />
Der Factory muss nur die Kennung und der dazugehörige Datentyp bekannt sein und kann dann ein Objekt für mich erzeugen.<br />
Wichtig ist auch noch, das alle Datentypen eine gemeinsame Schnittstelle besitzen.<br />
Hoffentlich hab ich's bis jetzt richtig verstanden.</p>
<p>Also, hier hab ich mal zwei Klassen:<br />
eine Basis Klasse und eine davon abgeleitete.</p>
<pre><code class="language-cpp">class Base
{
   public:
      virtual void start(void) = 0;
}

class Derived : public Base
{
   public:
      // Implementiert die Methode der Basis Klasse
      virtual start(void);

      // Besitzt noch eine weitere Methode
      void setValue(int i);
};
</code></pre>
<p>Nun hab ich aber ein Verständnisproblem bei vollgendem Code:</p>
<pre><code class="language-cpp">int main(void)
{
   Basis *b = factory.createObject(&quot;Typkennung&quot;);
   b-&gt;start();
}
</code></pre>
<p>Meinem Programm ist's nun ziemlich egal, welche konkrete Klasse von der Factory geliefert wird, solange das Interface implementiert wird.<br />
Soweit ist's noch klar.<br />
Was mach ich aber mit sowas?</p>
<pre><code class="language-cpp">int main(void)
{
   Base *b = factory.createObject(&quot;Derived&quot;);

   // Das klappt nicht, da die Methode setValue kein Teil der Basisschnittstelle ist
   b-&gt;setValue(1);
}
</code></pre>
<p>Allerdings klappt das auch nicht</p>
<pre><code class="language-cpp">int main(void)
{
   Derived *b = factory.createObject(&quot;Derived&quot;);

   // Das klappt nicht, da die Methode createObject() der Factory nur den Basis Typ liefert 
   b-&gt;setValue(1);
}
</code></pre>
<p>Dann bliebe mir ja nur noch vollgendes:</p>
<pre><code class="language-cpp">int main(void)
{
   Derived *b = static_cast&lt;Derived*&gt;(factory.createObject(&quot;Derived&quot;));

   // Jetzt klappt's
   b-&gt;setValue(1);
}
</code></pre>
<p>Hab ich die Verwendung der Factories wirklich verstanden?<br />
Es hat natürlich Vorteile, wenn die Objekte nicht in meinem Programme direkt, sondern zentral angelegt werden.<br />
Allerdings lege ich micht mit dem <strong>static_cast</strong> doch auf einen Typ fest, oder nicht?</p>
<p>Vielleicht kann mir ja einer von euch einen Tipp für die Verwendung von Factories geben.<br />
Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1149996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1149996</guid><dc:creator><![CDATA[nucknuck]]></dc:creator><pubDate>Thu, 05 Oct 2006 15:09:07 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt Fabriken on Thu, 05 Oct 2006 16:19:19 GMT]]></title><description><![CDATA[<p>Hallo</p>
<blockquote>
<p>Das klappt nicht, da die Methode setValue kein Teil der Basisschnittstelle ist</p>
</blockquote>
<p>Das ist das Problem. Das ganze Schnittstelle-Factory-Prinzip macht nur Sinn, wenn die Schnittstelle komplett ausreicht, um alle notwendigen Funktionen von außen über die Schnittstelle aufzurufen.</p>
<p>casten hingegen ist keine Lösuzng, weil sie alle Vorteile der Schnittstelle wieder zunichte macht.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1150031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150031</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Thu, 05 Oct 2006 16:19:19 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt Fabriken on Thu, 05 Oct 2006 18:42:05 GMT]]></title><description><![CDATA[<p>Wirklich ärgerlich.<br />
Damit ist dieses Pattern leidern nicht für mich geeignet.<br />
Aber danke für die Antwort.</p>
<p>Bis denne</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1150132</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150132</guid><dc:creator><![CDATA[nucknuck]]></dc:creator><pubDate>Thu, 05 Oct 2006 18:42:05 GMT</pubDate></item></channel></rss>