<?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[Designproblem (Methoden auslagern)]]></title><description><![CDATA[<p>Hallo NG,</p>
<p>Ich schlage mich zur Zeit mit einem Designproblem herum und hoffe, dass es noch eine bessere Lösung als die meine gibt.</p>
<p>Folgendes Szenario:<br />
Es gibt 4 Grundklassen, die in einer Hierarchie aufgebaut sind.<br />
C erbt von A und B. D erbt von C. Von diesen 4 Grundklassen sind wiederum viele Klassen abgeleitet, die jetzt hier keine Rolle spielen.<br />
Von jeder dieser 4 Klassen möchte ich statistische Werte erzeugen. Diese sollen jedoch jeweils in einer eigenen Klasse implementiert werden. D.h die Berechnung der Statistik soll nicht in den Grundklassen erfolgen. Diese rufen nur spezielle Methoden in der jeweiligen Statistikklasse auf (nach dem Motto Ereignis X ist eingetreten)<br />
Die statistischen Werte wiederum verfolgen die gleiche Hierarchie wie die Grundklassen. D.h. Die Statistik für C enthält alle Statistikwerte von A und B und definiert neue.</p>
<p>Meine bisherige Lösung</p>
<pre><code>class statistic_monitor
{
public:
	virtual ~statistic_monitor();
protected:
	statistic_monitor();	
};

class statistic_provider
{
public:
	inline const statistic_monitor&amp; get_statistic();
	virtual ~statistic_provider();
protected:
	statistic_provider();
	virtual statistic_monitor* create_monitor() = 0;
private:
	statistic_monitor* m_monitor;
};

inline const statistic_monitor&amp; statistic_provider::get_statistic()
{
	return *m_monitor;
}
</code></pre>
<p>Implementation:</p>
<pre><code>statistic_provider::~statistic_provider()
{
	if (m_monitor != NULL)
		delete m_monitor;
}

statistic_provider::statistic_provider()
{
	m_monitor = create_monitor();
}
</code></pre>
<p>Jede der 4 Grundklassen erbt nun von statstic_provider. Zusätzlich gibt es 4 Statstikklassen, die der gleichen Hierarchie folgen wie die Grundklassen und von statistic_monitor erben. In den 4 Grundklassen wird jeweils die Methode create_monitor überschrieben und eine neue Instanz der jeweiligen Statistikklasse zurückgegeben.</p>
<p>Was mir noch nicht gefällt:<br />
Die Statistikobjekte sind in den Grundklassen nur als Angehörige der Klasse statistic_monitor bekannt und müssen explizit in ihren richtigen Typ gecastet werden.</p>
<p>Ich vermute, dass es noch eine bessere Lösung mittels Templates gibt, finde sie aber nicht selbst.</p>
<p>Grüße<br />
Timo</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/237849/designproblem-methoden-auslagern</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 06:09:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/237849.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 02 Apr 2009 17:57:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Designproblem (Methoden auslagern) on Thu, 02 Apr 2009 17:57:52 GMT]]></title><description><![CDATA[<p>Hallo NG,</p>
<p>Ich schlage mich zur Zeit mit einem Designproblem herum und hoffe, dass es noch eine bessere Lösung als die meine gibt.</p>
<p>Folgendes Szenario:<br />
Es gibt 4 Grundklassen, die in einer Hierarchie aufgebaut sind.<br />
C erbt von A und B. D erbt von C. Von diesen 4 Grundklassen sind wiederum viele Klassen abgeleitet, die jetzt hier keine Rolle spielen.<br />
Von jeder dieser 4 Klassen möchte ich statistische Werte erzeugen. Diese sollen jedoch jeweils in einer eigenen Klasse implementiert werden. D.h die Berechnung der Statistik soll nicht in den Grundklassen erfolgen. Diese rufen nur spezielle Methoden in der jeweiligen Statistikklasse auf (nach dem Motto Ereignis X ist eingetreten)<br />
Die statistischen Werte wiederum verfolgen die gleiche Hierarchie wie die Grundklassen. D.h. Die Statistik für C enthält alle Statistikwerte von A und B und definiert neue.</p>
<p>Meine bisherige Lösung</p>
<pre><code>class statistic_monitor
{
public:
	virtual ~statistic_monitor();
protected:
	statistic_monitor();	
};

class statistic_provider
{
public:
	inline const statistic_monitor&amp; get_statistic();
	virtual ~statistic_provider();
protected:
	statistic_provider();
	virtual statistic_monitor* create_monitor() = 0;
private:
	statistic_monitor* m_monitor;
};

inline const statistic_monitor&amp; statistic_provider::get_statistic()
{
	return *m_monitor;
}
</code></pre>
<p>Implementation:</p>
<pre><code>statistic_provider::~statistic_provider()
{
	if (m_monitor != NULL)
		delete m_monitor;
}

statistic_provider::statistic_provider()
{
	m_monitor = create_monitor();
}
</code></pre>
<p>Jede der 4 Grundklassen erbt nun von statstic_provider. Zusätzlich gibt es 4 Statstikklassen, die der gleichen Hierarchie folgen wie die Grundklassen und von statistic_monitor erben. In den 4 Grundklassen wird jeweils die Methode create_monitor überschrieben und eine neue Instanz der jeweiligen Statistikklasse zurückgegeben.</p>
<p>Was mir noch nicht gefällt:<br />
Die Statistikobjekte sind in den Grundklassen nur als Angehörige der Klasse statistic_monitor bekannt und müssen explizit in ihren richtigen Typ gecastet werden.</p>
<p>Ich vermute, dass es noch eine bessere Lösung mittels Templates gibt, finde sie aber nicht selbst.</p>
<p>Grüße<br />
Timo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1690033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1690033</guid><dc:creator><![CDATA[horscht2999]]></dc:creator><pubDate>Thu, 02 Apr 2009 17:57:52 GMT</pubDate></item><item><title><![CDATA[Reply to Designproblem (Methoden auslagern) on Fri, 03 Apr 2009 02:45:30 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Kapiert das einer? Ein Diagramm täte gut tun. So nach dem Motto UML. <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/1690205</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1690205</guid><dc:creator><![CDATA[Mitleid]]></dc:creator><pubDate>Fri, 03 Apr 2009 02:45:30 GMT</pubDate></item></channel></rss>