<?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[Meinungen zur Implementierung]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe heute eine abstrakte factory implementiert und bin mir noch sehr unsicher, was ich davon halen soll.<br />
Bin über Kritik dankbar.<br />
main.cpp</p>
<pre><code class="language-cpp">AbstractFactory&amp; factory1=ConcretFactory1::getInstance();
	factory1.CreateA();
	factory1.CreateB();
	factory1.CreateN();

	AbstractFactory&amp; factory2=ConcretFactory2::getInstance();
	factory2.CreateA();
	factory2.CreateB();
	factory2.CreateN();
</code></pre>
<p>AbstractFactory.h</p>
<pre><code class="language-cpp">class AbstractProductA;
class AbstractProductB;
class AbstractProductN;

class ConcretFactory1;
class ConcretFactory2;

class AbstractFactory
{
//friend ConcretFactory1;
//friend ConcretFactory2;

public:
	// The creator functions 
	virtual AbstractProductA *CreateA(void) const =0;
	virtual AbstractProductB *CreateB(void) const =0;
	virtual AbstractProductN *CreateN(void) const =0;
protected:
	AbstractFactory();
	~AbstractFactory();
private:
	// Not implemented
	AbstractFactory(AbstractFactory const &amp;);
	AbstractFactory &amp; operator=(AbstractFactory const &amp;);
};

#endif // ABSTRACT_FACTORY_H
</code></pre>
<p>ConcretFactory1.h</p>
<pre><code class="language-cpp">#ifndef CONCRET_FACTORY_1_H
#define CONCRET_FACTORY_1_H

#include &quot;AbstractFactory.h&quot;

class ConcretFactory1 : public AbstractFactory
{

public:
	AbstractProductA *CreateA(void)const{std::cout &lt;&lt;&quot;\n F1::CreatA&quot;; return 0;};
	AbstractProductB *CreateB(void)const{std::cout &lt;&lt;&quot;\n F1::CreatB&quot;; return 0;};
	AbstractProductN *CreateN(void)const{std::cout &lt;&lt;&quot;\n F1::CreatN&quot;; return 0;};
	static ConcretFactory1&amp; getInstance(void){static ConcretFactory1 _Instance;return _Instance;};
private:
	ConcretFactory1():AbstractFactory(){std::cout &lt;&lt;&quot;\nConcretFactory1()&quot;;};
	~ConcretFactory1(){std::cout &lt;&lt;&quot;\n~ConcretFactory1()&quot;;};
	// Not implemented
	ConcretFactory1(ConcretFactory1 const &amp;);
	ConcretFactory1 &amp; operator=(ConcretFactory1 const &amp;);

};

#endif //CONCRET_FACTORY_1_H
</code></pre>
<p>Die zweite konkrete Fabrik schaut gleich aus, nur eben den einser durch nen zweier ersetzt.</p>
<p>Was mich konkret stört ist, dass ich im Grunde zwar Laufzeitpolymorphismus benutze, es aber durch dir referenz nicht wirklich schön anwenden kann...<br />
Ich wollte eigentlich exmplizit den Pointer vermeiden.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/302550/meinungen-zur-implementierung</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 07:43:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/302550.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 21 Apr 2012 15:56:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Meinungen zur Implementierung on Sat, 21 Apr 2012 15:56:36 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe heute eine abstrakte factory implementiert und bin mir noch sehr unsicher, was ich davon halen soll.<br />
Bin über Kritik dankbar.<br />
main.cpp</p>
<pre><code class="language-cpp">AbstractFactory&amp; factory1=ConcretFactory1::getInstance();
	factory1.CreateA();
	factory1.CreateB();
	factory1.CreateN();

	AbstractFactory&amp; factory2=ConcretFactory2::getInstance();
	factory2.CreateA();
	factory2.CreateB();
	factory2.CreateN();
</code></pre>
<p>AbstractFactory.h</p>
<pre><code class="language-cpp">class AbstractProductA;
class AbstractProductB;
class AbstractProductN;

class ConcretFactory1;
class ConcretFactory2;

class AbstractFactory
{
//friend ConcretFactory1;
//friend ConcretFactory2;

public:
	// The creator functions 
	virtual AbstractProductA *CreateA(void) const =0;
	virtual AbstractProductB *CreateB(void) const =0;
	virtual AbstractProductN *CreateN(void) const =0;
protected:
	AbstractFactory();
	~AbstractFactory();
private:
	// Not implemented
	AbstractFactory(AbstractFactory const &amp;);
	AbstractFactory &amp; operator=(AbstractFactory const &amp;);
};

#endif // ABSTRACT_FACTORY_H
</code></pre>
<p>ConcretFactory1.h</p>
<pre><code class="language-cpp">#ifndef CONCRET_FACTORY_1_H
#define CONCRET_FACTORY_1_H

#include &quot;AbstractFactory.h&quot;

class ConcretFactory1 : public AbstractFactory
{

public:
	AbstractProductA *CreateA(void)const{std::cout &lt;&lt;&quot;\n F1::CreatA&quot;; return 0;};
	AbstractProductB *CreateB(void)const{std::cout &lt;&lt;&quot;\n F1::CreatB&quot;; return 0;};
	AbstractProductN *CreateN(void)const{std::cout &lt;&lt;&quot;\n F1::CreatN&quot;; return 0;};
	static ConcretFactory1&amp; getInstance(void){static ConcretFactory1 _Instance;return _Instance;};
private:
	ConcretFactory1():AbstractFactory(){std::cout &lt;&lt;&quot;\nConcretFactory1()&quot;;};
	~ConcretFactory1(){std::cout &lt;&lt;&quot;\n~ConcretFactory1()&quot;;};
	// Not implemented
	ConcretFactory1(ConcretFactory1 const &amp;);
	ConcretFactory1 &amp; operator=(ConcretFactory1 const &amp;);

};

#endif //CONCRET_FACTORY_1_H
</code></pre>
<p>Die zweite konkrete Fabrik schaut gleich aus, nur eben den einser durch nen zweier ersetzt.</p>
<p>Was mich konkret stört ist, dass ich im Grunde zwar Laufzeitpolymorphismus benutze, es aber durch dir referenz nicht wirklich schön anwenden kann...<br />
Ich wollte eigentlich exmplizit den Pointer vermeiden.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204241</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204241</guid><dc:creator><![CDATA[AlexanderKiebler]]></dc:creator><pubDate>Sat, 21 Apr 2012 15:56:36 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur Implementierung on Sat, 21 Apr 2012 16:00:06 GMT]]></title><description><![CDATA[<p>Welches Problem soll deine Factory loesen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204243</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Sat, 21 Apr 2012 16:00:06 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur Implementierung on Sat, 21 Apr 2012 17:11:37 GMT]]></title><description><![CDATA[<p>AlexanderKiebler schrieb:</p>
<blockquote>
<p>Was mich konkret stört ist, dass ich im Grunde zwar Laufzeitpolymorphismus benutze, es aber durch dir referenz nicht wirklich schön anwenden kann...<br />
Ich wollte eigentlich exmplizit den Pointer vermeiden.</p>
</blockquote>
<p>Welche Referenz? Wieso kannst du damit keine Polymorphie anwenden?<br />
Mich stört konkret an deiner Fabrik, dass sie gar nichts erzeugt ausser Nullen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Ich vermute (man kann hier ja gar nicht über die tatsächliche Implementierung sehen), dass mich auch das Singleton und die Zeiger, die die Methoden zurückgeben stören.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204261</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Sat, 21 Apr 2012 17:11:37 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur Implementierung on Sat, 21 Apr 2012 17:32:40 GMT]]></title><description><![CDATA[<p>Ja, ich gebe erstmal noch nullen zurück... das liegt daran, dass ich mir<br />
einen designpattern katalog in mein privates Wickipedia einpflegen möchte.<br />
Und zu diskret darf ich da nicht werden. =)....</p>
<p>Die Zeiger und der Sigelton sind explizit gewollt und sind auch gut so. Es ist nicht aufgabe der Factory, ein Zusammengebautes Objekt auch zu zerstören.<br />
Das muss das client objekt machen.</p>
<p>Aber ich glaube es ist schöner Zeiger von den konkreten Typen zurückzugeben.<br />
Also in der Form:</p>
<pre><code class="language-cpp">class ConcretProductA;
class ConcretProductB;
class ConcretProductN;

class ConcretFactory1;
class ConcretFactory2;

class AbstractFactory
{

public:
    // The creator functions
    virtual ConcretProductA *CreateA(void) const =0;
    virtual ConcretProductB *CreateB(void) const =0;
    virtual ConcretProductN *CreateN(void) const =0;
protected:
    AbstractFactory();
    ~AbstractFactory();
private:
    // Not implemented
    AbstractFactory(AbstractFactory const &amp;);
    AbstractFactory &amp; operator=(AbstractFactory const &amp;);
};

#endif // ABSTRACT_FACTORY_H
</code></pre>
<p>ConcretFactory1.h</p>
<pre><code class="language-cpp">#ifndef CONCRET_FACTORY_1_H
#define CONCRET_FACTORY_1_H

#include &quot;AbstractFactory.h&quot;

class ConcretFactory1 : public AbstractFactory
{

public:
	ConcretProductA *CreateA(void)const{std::cout &lt;&lt;&quot;\n F1::CreatA&quot;; return 0;};
	ConcretProductB *CreateB(void)const{std::cout &lt;&lt;&quot;\n F1::CreatB&quot;; return 0;};
	ConcretProductN *CreateN(void)const{std::cout &lt;&lt;&quot;\n F1::CreatN&quot;; return 0;};
	static ConcretFactory1&amp; getInstance(void){static ConcretFactory1 _Instance;return _Instance;};
private:
	ConcretFactory1():AbstractFactory(){std::cout &lt;&lt;&quot;\nConcretFactory1()&quot;;};
	~ConcretFactory1(){std::cout &lt;&lt;&quot;\n~ConcretFactory1()&quot;;};
	// Not implemented
	ConcretFactory1(ConcretFactory1 const &amp;);
	ConcretFactory1 &amp; operator=(ConcretFactory1 const &amp;);

};

#endif //CONCRET_FACTORY_1_H
</code></pre>
<p>Die referenz passt glaube ich doch auch ganz gut. Wenn ich weiter programmiere,<br />
dann wird es passen habe ich mir überlegt. Das liegt daran, dass ein konkretes Produkt nur explizit eine Factoryfunktion benutzt und das auch darf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204267</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204267</guid><dc:creator><![CDATA[AlexanderKiebler]]></dc:creator><pubDate>Sat, 21 Apr 2012 17:32:40 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur Implementierung on Sat, 21 Apr 2012 17:34:37 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Welches Problem soll deine Factory loesen?</p>
</blockquote>
<p>Ich find das ist hier immer noch die interessanteste aller Fragen...</p>
<p>Wie soll man ein Design beurteilen wenn man nichtmal weiß wofür es eigentlich gut sein soll!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204269</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Sat, 21 Apr 2012 17:34:37 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur Implementierung on Sat, 21 Apr 2012 17:46:48 GMT]]></title><description><![CDATA[<p>AlexanderKiebler schrieb:</p>
<blockquote>
<p>Wickipedia</p>
</blockquote>
<p>Das ist wirklich nett von dir, dass du eine Enzyklopädie für Wickie Fans einrichten möchtest. So etwas habe ich schon lange gesucht!</p>
<p>Ansonsten schließe ich mit mal knivil und dot an: Man macht doch keine Factory nur weil's schön aussieht. oO</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204277</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204277</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 21 Apr 2012 17:46:48 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur Implementierung on Sat, 21 Apr 2012 19:12:11 GMT]]></title><description><![CDATA[<p>Für die wirklich wichtige Frage brauch in noch Zeit... =(...</p>
<p>Ich vermute, dass man das mit Templates besser machen kann...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204297</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204297</guid><dc:creator><![CDATA[AlexanderKiebler]]></dc:creator><pubDate>Sat, 21 Apr 2012 19:12:11 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur Implementierung on Sat, 21 Apr 2012 22:14:24 GMT]]></title><description><![CDATA[<p>Hmm okay,</p>
<p>also habe das mal fertig implementiert....</p>
<p>So wie es jetzt ist, kann man die Produktfamilie zur Laufzeit ändern.</p>
<pre><code class="language-cpp">client client_app;

	client_app.Execute();
	for(unsigned int x=0;100&gt;x;x++)
	{
		client_app.select_prod_famlily(x%2);
		client_app.Execute();
	}
</code></pre>
<p>Damit läßt sich sehr schön arbeiten.<br />
Der Code artet aber echt aus für größere Sachen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204313</guid><dc:creator><![CDATA[AlexanderKiebler]]></dc:creator><pubDate>Sat, 21 Apr 2012 22:14:24 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur Implementierung on Sun, 22 Apr 2012 00:31:12 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">AbstractFactory&amp; factory1=ConcretFactory1::getInstance(); 
    factory1.CreateA(); 
    factory1.CreateB(); 
    factory1.CreateN();
</code></pre>
<p>Also ich habe ja generell ein ... Problem (ist wohl uebertrieben) mit Factories: Welchen Vorteil hat dein Beispiel in der die Factory 3 Objekte erzeugt gegenueber einfachen Konstruktor- oder Funktionsaufrufen? Oder anders herum gefragt: Warum brauchst du eine Factory, welches anwendungsspezifische Problem loesen sie?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204334</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Sun, 22 Apr 2012 00:31:12 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur Implementierung on Sun, 22 Apr 2012 09:56:42 GMT]]></title><description><![CDATA[<p>Also im Grunde genommen habe ich mit der abstrakten Factory getrennt:</p>
<p>Was wird benutzt,<br />
Und wie wird es benutzt.</p>
<p>Der Client benutzt irgendwelche Objekte, und er weiß nur wie er sie benutzt.<br />
Die konkreten objekte dahinter können aber beliebig zur Laufzeit ausgetauscht werden. Welche Objekte gemeinsam funktionieren ist Aufgabe der konkreten Factory.</p>
<p>Ich findes, dass das Sinn macht. Wenn man Probleme trennt, kann man sich besser darauf focusieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204379</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204379</guid><dc:creator><![CDATA[AlexanderKiebler]]></dc:creator><pubDate>Sun, 22 Apr 2012 09:56:42 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur Implementierung on Sun, 22 Apr 2012 11:03:55 GMT]]></title><description><![CDATA[<blockquote>
<p>Die konkreten objekte dahinter können aber beliebig zur Laufzeit ausgetauscht werden.</p>
</blockquote>
<p>Nein, koennen sie nicht. Sie muessen zumindest ein gemeinsames Interface besitzen, d.h eine gemeinsame Basisklasse. Der &quot;Austausch&quot; kann auf viele Arten geschehen, indem Basisklassenzeiger verwendet werden.</p>
<p>Darueber hinaus halte ich die Intention fuer fraglich. Ich erzeuge ein Objekt A mittels CreateA, tausche zur Laufzeit in der Factory etwas aus, erzeuge ein Objekt B ebenfalls mit CreateA. Nun sind aber A und B vom Typ her verschieden, obwohl ich sie auf die gleiche Art und Weise erzeugt habe, also den gleichen &quot;Konstruktor&quot; aufgerufen habe. Also ich mache von der Client-Sete her das gleiche, bekomme aber trotzdem was verschiedenes. Das halte ich nicht fuer gut.</p>
<p>Naechstes Problem: Ich will einen Unit-Test schreiben. Deine Klasse bekommt die Factory als Parameter im Konstruktor uebergeben und erzeugt ihre Member. Fuer einen Unit-Test muss ich die Implementation, des Konstruktors kennen, welche Methoden der Factory benutzt werden, welchen Zustand die Factory hat ... . Das sind alles Implementationsdetails, die fuer einen Unit-Test garnicht von belang sein sollten. Ihn zu schreiben wird wesentlich aufwendiger und fehleranfaelliger.</p>
<blockquote>
<p>Ich findes, dass das Sinn macht. Wenn man Probleme trennt, kann man sich besser darauf focusieren.</p>
</blockquote>
<p>Das ist allgemeines BlaBla und kann ueberall gesagt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204399</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Sun, 22 Apr 2012 11:03:55 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur Implementierung on Sun, 22 Apr 2012 11:38:08 GMT]]></title><description><![CDATA[<p>Ich glaube wir benötigen ein Bildchen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title="=)"
      alt="🙂"
    /></p>
<p><a href="http://sourcemaking.com/files/sm/images/patterns/Abstract_Factory_example1.gif" rel="nofollow">http://sourcemaking.com/files/sm/images/patterns/Abstract_Factory_example1.gif</a></p>
<p>[EDIT: Das bildchen ist nicht ganz so schön, aber hab auf die kürtze nichts besseres gefunden]</p>
<p>[EDIT: Hab ne schönere Grfik gefunden]<br />
<a href="http://t1.gstatic.com/images?q=tbn:ANd9GcS2KwweB3MZx5GDWs7G6Dlr-Qh697sem53hPxUVWg3FzYUssa5clQ" rel="nofollow">http://t1.gstatic.com/images?q=tbn:ANd9GcS2KwweB3MZx5GDWs7G6Dlr-Qh697sem53hPxUVWg3FzYUssa5clQ</a></p>
<p>schau mal da, also das Pattern hat schon seinen Sinn.</p>
<p>Dass die Objekte ein gemeinsames Interface haben.... na ja das ist klar.<br />
Das steht ja so im Muster. Das war meine Aussage &quot;Und wie wird es benutzt&quot;</p>
<p>&quot;Die konkreten objekte dahinter können aber beliebig zur Laufzeit ausgetauscht werden.&quot; Ja okay, das ist wohl nicht ganz richtig ausgedrückt. Ich hoffte, dass ich für Objekt&quot;e&quot; den plural verwendet habe genügt... aber wohl nicht. Ich habe aber explizit hinzugefügt:<br />
&quot;Welche Objekte gemeinsam funktionieren ist Aufgabe der konkreten Factory. &quot;<br />
Ich denke da wirds dann eindeutig.</p>
<p>In Deinem Beispiel hast du den Fehler gemacht, dass du mi CreateA lediglich<br />
A1, A2,A3... etc erzeugen kannst, je nach dem ob du die Konkrete Factory 1,2,3... etc benutzt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204409</guid><dc:creator><![CDATA[AlexanderKiebler]]></dc:creator><pubDate>Sun, 22 Apr 2012 11:38:08 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur Implementierung on Sun, 22 Apr 2012 11:50:57 GMT]]></title><description><![CDATA[<p>In C++ kann man halt recht oft die ganzen &quot;Javastyle&quot;-Designpattern zum Teufel jagen. Würde da immer etwas darüber nachdenken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204419</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204419</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Sun, 22 Apr 2012 11:50:57 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur Implementierung on Sun, 22 Apr 2012 12:30:45 GMT]]></title><description><![CDATA[<p>*ggg* Genau, deswegen hab ich das auch aus einem Design Pattern buch wo gand dick und fett C++ drauf steht. *lach*</p>
<p>Aber gut jetzt... Was micht viel mehr stört ist, dass sich der code total aufbläht.... .</p>
<p>Aber das mit dem Unit Test, finde ich ein gutes Argument..... ja das stimmt....<br />
wobei man da ja jede Produktvariante getrennt testen kann...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204423</guid><dc:creator><![CDATA[AlexanderKiebler]]></dc:creator><pubDate>Sun, 22 Apr 2012 12:30:45 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur Implementierung on Sun, 22 Apr 2012 13:16:55 GMT]]></title><description><![CDATA[<blockquote>
<p>Ich glaube wir benötigen ein Bildchen.</p>
</blockquote>
<p>Ich weiss, was das Factory-Pattern ist.</p>
<blockquote>
<p>Was micht viel mehr stört ist, dass sich der code total aufbläht....</p>
</blockquote>
<p>Waran das wohl liegt ...</p>
<blockquote>
<p>Design Pattern buch wo gand dick und fett C++ drauf steht.</p>
</blockquote>
<p>Klar koennen die Design-Pattern auch in C++ umgesetzt werden. Aber ob das immer sinnvoll ist, bezweifle ich.</p>
<blockquote>
<p>In C++ kann man halt recht oft die ganzen &quot;Javastyle&quot;-Designpattern zum Teufel jagen. Würde da immer etwas darüber nachdenken.</p>
</blockquote>
<p>Danke! Ich weiss nun, das ich keine Einzelmeinung vertrete.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204453</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204453</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Sun, 22 Apr 2012 13:16:55 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur Implementierung on Sun, 22 Apr 2012 13:25:49 GMT]]></title><description><![CDATA[<p>Hmm na ja wahrscheinlich kann man da getrennter Meinung sein.</p>
<p>Habe sie öfter gesehen, und finde sie sehr gut.</p>
<p>Wegen deom Code Aufblähen werde ich mich mal an eine generische implementierung machen. Aber ohne sie hier rein zu stellen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204457</guid><dc:creator><![CDATA[AlexanderKiebler]]></dc:creator><pubDate>Sun, 22 Apr 2012 13:25:49 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur Implementierung on Sun, 22 Apr 2012 13:38:20 GMT]]></title><description><![CDATA[<p>Jon Bentley sagt sinngemaess: Software engineering dient dazu, Komplexitaet zu beherrschen aber nicht zu erzeugen.</p>
<p>Du erzeugst Komplexitaet. Allein schon deine Factory ohne Grund zu benutzen. Sie fuehrt zu Codebloat. Ein selbstverschuldetes Problem. Um dieses zu Loesen, erhoehst du den Komplexitaetsgrad weiter, indem du einen generischen Ansatz verfolgst. Du magst vielleicht nicht abschaetzen, wohin das fuehrt. Deswegen warne ich dich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204466</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204466</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Sun, 22 Apr 2012 13:38:20 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur Implementierung on Sun, 22 Apr 2012 13:57:06 GMT]]></title><description><![CDATA[<p>In erster Linie implementiere ich ein Designpattern welches sich doch einiger popularität erfreut.</p>
<p>Und den Code werde ich in mein Wicki einpflegen um ihn wenn ich ihn brauche zur Hand zu haben.</p>
<p>Dadurch dass du das zu behandelnde Problem genausowenig kennst wie ich, ist es echt zimlich ins blaue geschossen ob ich unnötige komplexität erzeuge...<br />
Das kann man doch so garnicht vorhersagen. Ich würde das akzeptieren, wenn ich ein konkretes Problem hätte, und ein einfacheres Muster das Slebe problem lösen würde.... Aber so... habe ich ausschließlich ein pattern implementiert was auch mein Ziel war. Du scheinst nicht zu verstehen, dass ich dieses Muster implementiert habe, und nicht nach einem Muster zu einem Problem suche.<br />
Das sind nunmal zweipaar stiefel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204475</guid><dc:creator><![CDATA[AlexanderKiebler]]></dc:creator><pubDate>Sun, 22 Apr 2012 13:57:06 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur Implementierung on Sun, 22 Apr 2012 14:10:22 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<p>In C++ kann man halt recht oft die ganzen &quot;Javastyle&quot;-Designpattern zum Teufel jagen. Würde da immer etwas darüber nachdenken.</p>
</blockquote>
<p>Abstract Factory ist eines der GoF Pattern. Das Buch ist 1994 erschienen und da waren die meisten Muster schon bekannt, es war nur eine Katalogisierung. Diese Muster stammen also mit Sicherheit nicht aus der Java Community, denn die erste öffentliche Java Version kam nach GoF <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> . Es gibt in Java, C++, C# und anderen Sprachen sicherlich einige Anwendungsfälle für eine GoF Abstract Factory. Ich muss allerdings sagen, dass ich das exakte Muster auch nur ein paar wenige Male angewendet habe. Es scheint vielleicht auf den ersten Blick etwas sehr offentsichtliches, praktisches, häufig anzuwendendes zu sein, wirklich sinnvolle Anwendungen begegnen einem aber in der Tat eher selten.<br />
Egal in welcher Sprache, man sollte zunächst immer möglichst einfache Lösungen anstreben. Gedanken über Flexibilität und Erweiterbarkeit kann man sich machen, wenn man sie benötigt. Nicht wenn man vermutet sie zu benötigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204479</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204479</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Sun, 22 Apr 2012 14:10:22 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur Implementierung on Sun, 22 Apr 2012 14:21:27 GMT]]></title><description><![CDATA[<p>Hmm ja das passt... So sehe ich das auch...<br />
Das zu viel Argument ist auch einer meiner ersten Gedanken gewesen... das stimmt.<br />
Trotzdem habe ich es mir eben zum einpflegen mal vorgenommen für deses We...</p>
<p>Also keine Angst, ich bevorzuge die einfachen Muster den komplexen, wenn sie das problem genauso lösen. Klaro.... Aber ich wollte keine Fallstudie machen.<br />
Ich möchte ein Katalog mit Codestückchen für mich die ich zumindest teilweise so wiederverwenden kann, oder eben abgewandelt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204484</guid><dc:creator><![CDATA[AlexanderKiebler]]></dc:creator><pubDate>Sun, 22 Apr 2012 14:21:27 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur Implementierung on Sun, 22 Apr 2012 14:51:28 GMT]]></title><description><![CDATA[<blockquote>
<p>also mit Sicherheit nicht aus der Java Community, denn die erste öffentliche Java Version kam nach GoF</p>
</blockquote>
<p>Der Ursprung ist natuerlich nicht in der Java-Welt zu suchen. Es wird dort haeufig und gern angewandt, gerade auch ohne Not.</p>
<blockquote>
<p>ich bevorzuge die einfachen Muster den komplexen</p>
</blockquote>
<p>Und hier hast du schon verloren, da du in Mustern denkst bzw. das Problem dort hineinpresst. Den gleichen Fehler haben viele mit Objektorientierung und Vererbung gemacht, aber nicht jedes Problem ist ein Objekt und Vererbung selten eine Loesung.</p>
<p>PS: Ja es ist Religion, ich versuche dich vor der Hoelle zu bewahren. Abschliessend:</p>
<p>The Tao Of Programming: Book 4 - Coding schrieb:</p>
<blockquote>
<p>Thus spake the master programmer:</p>
<p>``A well-written program is its own heaven; a poorly-written program is its own hell.''</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2204487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204487</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Sun, 22 Apr 2012 14:51:28 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur Implementierung on Sun, 22 Apr 2012 14:33:33 GMT]]></title><description><![CDATA[<p>brotbernd schrieb:</p>
<blockquote>
<p>Ethon schrieb:</p>
<blockquote>
<p>In C++ kann man halt recht oft die ganzen &quot;Javastyle&quot;-Designpattern zum Teufel jagen. Würde da immer etwas darüber nachdenken.</p>
</blockquote>
<p>Abstract Factory ist eines der GoF Pattern. Das Buch ist 1994 erschienen und da waren die meisten Muster schon bekannt, es war nur eine Katalogisierung. Diese Muster stammen also mit Sicherheit nicht aus der Java Community, denn die erste öffentliche Java Version kam nach GoF <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> . Es gibt in Java, C++, C# und anderen Sprachen sicherlich einige Anwendungsfälle für eine GoF Abstract Factory. Ich muss allerdings sagen, dass ich das exakte Muster auch nur ein paar wenige Male angewendet habe. Es scheint vielleicht auf den ersten Blick etwas sehr offentsichtliches, praktisches, häufig anzuwendendes zu sein, wirklich sinnvolle Anwendungen begegnen einem aber in der Tat eher selten.<br />
Egal in welcher Sprache, man sollte zunächst immer möglichst einfache Lösungen anstreben. Gedanken über Flexibilität und Erweiterbarkeit kann man sich machen, wenn man sie benötigt. Nicht wenn man vermutet sie zu benötigen.</p>
</blockquote>
<p>Ich nenne es &quot;Java-Pattern&quot;, weil es in Java schön umzusetzen ist und deswegen auch häufig gemacht wird. In Java ist es halt cool mit new und Polymorphie herumzuscheißen, weil es nicht anders geht und keine Performance kostet.</p>
<p>In C++ geht es mir schon gehörig auf den Senkel, überall alles in unique_ptr s zu stopfen (und andauernd moven zu müssen, wenn der Besitz abgegeben wird), weil einfach kein GC da ist, außerdem kostet die ganze Laufzeit-Dynamik viel, die möglicherweise doch &quot;Compilezeit-Dynamik&quot; ersetzbar wäre.</p>
<p>Gängig in C++ ist es halt, alles was zur Compilezeit entscheidbar ist, per Template dynamisch zu machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204488</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Sun, 22 Apr 2012 14:33:33 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur Implementierung on Sun, 22 Apr 2012 14:43:53 GMT]]></title><description><![CDATA[<p>Ja,</p>
<p>&quot;Gängig in C++ ist es halt, alles was zur Compilezeit entscheidbar ist, per Template dynamisch zu machen. &quot;</p>
<p>Das finde ich auch ein sehr guter einwand. Wobei das auf die Implementieruing abziehlt. Ich bin auch an einer Lösung mit statischem Polymorphismus interessiert.</p>
<p>Und um ehrlich zu sein wollte ich heut noch eine Implementierung wagen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204489</guid><dc:creator><![CDATA[AlexanderKiebler]]></dc:creator><pubDate>Sun, 22 Apr 2012 14:43:53 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur Implementierung on Sun, 22 Apr 2012 14:48:45 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<p>...außerdem kostet die ganze Laufzeit-Dynamik viel, die möglicherweise doch &quot;Compilezeit-Dynamik&quot; ersetzbar wäre.</p>
</blockquote>
<p>Das kostet beides was. Die Laufzeit-Dynamik kosten dem Anwender (meistens kaum spürbar) Zeit, &quot;Compilezeit-Dynamik&quot; kostet dem, der die Entwicklung bezahlen muss Geld.</p>
<p>Ethon schrieb:</p>
<blockquote>
<p>Gängig in C++ ist es halt, alles was zur Compilezeit entscheidbar ist, per Template dynamisch zu machen.</p>
</blockquote>
<p>Das ist mit Sicherheit nur in kleineren Projekten oder Projekten mit speziellen Anforderungen gängig. Oder bei Leuten, die Spaß am Kompilieren haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204493</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Sun, 22 Apr 2012 14:48:45 GMT</pubDate></item><item><title><![CDATA[Reply to Meinungen zur Implementierung on Sun, 22 Apr 2012 15:13:12 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<p>Gängig in C++ ist es halt, alles was zur Compilezeit entscheidbar ist, per Template dynamisch zu machen.</p>
</blockquote>
<p>Nein, ist es nicht. Zumindest mache ich das nicht. Das zur Laufzeit aufzulösen ist zwar etwas langsamer, aber selbst bei 100 Funktionsaufrufen ist das ziemlich irrelevant. (Auch bei mehr.) Irgendwann fängt es natürlich an sich bemerkbar zu machen, aber das sind dann meistens eh recht kritische Stellen an denen man optimiert.</p>
<p>Ich würde mir zwar wünschen statische Interfaces zu haben, aber bis man das ordentlich benutzen kann, muss man noch auf Concepts + Module warten. Dann geht's aber richtig los. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204504</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204504</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sun, 22 Apr 2012 15:13:12 GMT</pubDate></item></channel></rss>