<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Linux @ Home &#187; Ruby</title>
	<atom:link href="http://www.linuxhome.ch/category/programmierung/ruby-programmierung/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.linuxhome.ch</link>
	<description>Pinguine, Politik undsoweiter...</description>
	<lastBuildDate>Thu, 29 Jul 2010 22:14:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3106</generator>
		<item>
		<title>Singleton-Pattern in Perl und Ruby</title>
		<link>http://www.linuxhome.ch/geek/singleton-pattern-in-perl-und-ruby/</link>
		<comments>http://www.linuxhome.ch/geek/singleton-pattern-in-perl-und-ruby/#comments</comments>
		<pubDate>Sat, 09 Feb 2008 18:31:32 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[programmierung]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.linuxhome.ch/ruby/singleton-pattern-in-perl-und-ruby/</guid>
		<description><![CDATA[Als auf der Arbeit einmal Langeweile angesagt war, diskutierte ich mit meinem lieben Arbeitskollegen Boris über Software-Patterns (Entwurfsmuster). Da kam uns die Idee, ein paar Patterns in unserer jeweils bevorzugten Programmiersprache umzusetzen. Als erstes, da relativ einfach: Singleton, also beispielsweise eine Klasse, die sich nur einmal instanzieren lässt und eine Funktion bereitstellt, die diese Instanz [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=d6b1294fe73eea0bc9dc84a732e5e880&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p>Als auf der Arbeit einmal Langeweile angesagt war, diskutierte ich mit meinem lieben Arbeitskollegen Boris über <a title="Entwurfsmuster" href="http://de.wikipedia.org/wiki/Entwurfsmuster">Software-Patterns (Entwurfsmuster)</a>. Da kam uns die Idee, ein paar Patterns in unserer jeweils bevorzugten Programmiersprache umzusetzen.</p>
<p>Als erstes, da relativ einfach: <a title="Singleton Pattern" href="http://de.wikipedia.org/wiki/Singleton_%28Entwurfsmuster%29">Singleton</a>, also beispielsweise eine Klasse, die sich nur einmal instanzieren lässt und eine Funktion bereitstellt, die diese Instanz zurückgibt (&#8220;new&#8221; oder &#8220;instance&#8221;).</p>
<p><span id="more-45"></span></p>
<p>Er überraschte mich schon kurz danach mit einer Implementation in Perl, die er ohne Online-Hilfe einfach so mal kurz geschrieben hat. Ich war von den Socken, denn Singleton wird in Perl nicht direkt angeboten. Da hat sich sein großes Talent wieder mal gezeigt. Gleichzeitig war ich froh, dass ich in Ruby schon Schnittstellen für verschiedenste Pattern zur Verfügung habe, denn ich bin nicht wirklich der geborene Programmierer.</p>
<p>Hier die Boris&#8217; Perl-Version, in Form eines Moduls und eines Testskriptes, bitte erwartet keine genaue Erklärungen von mir, was z.B. die Funktion &#8220;bless&#8221; genau macht usw.:</p>
<p>einzelgaenger.pm:</p>
<pre>package einzelgaenger;

use strict;

my $ref = 0;
my $class = '';

sub getInstance {
        $class = shift;
        unless ($ref) {
                $ref = {};
                bless($ref,$class);
        }
        return($ref);
}

sub say {
        my $this = shift;
        if ($this-&gt;{'hit'}) {
                print "AUTSCH! Ich sag nichts mehr, du!\n";
        }
        else {
                print "Ich bin ein $class. Mich gibt es nur einmal, egal
wie oft du mich instanzierst, du bekommst immer: $this\n";
        }
}

sub hit {
        my $this = shift;
        $this-&gt;{'hit'} = 1;
        print "*klaps!*\n";
}

1;</pre>
<p>einzelgaenger-test.pl:</p>
<pre>use strict;
use einzelgaenger;

print &lt;&lt;TEXT;

Wulli &#038; Peter  -  Das Singleton-Pattern
***************************************

TEXT

print "Wir machen uns einen Wulli.\n";       my $wulli =
einzelgaenger-&gt;getInstance();
print "Wir machen uns einen Peter.\n\n";     my $peter =
einzelgaenger-&gt;getInstance();

print "Wulli sagt: ";                        $wulli-&gt;say();
print "Peter sagt: ";                        $peter-&gt;say();

print "\nWir schlagen Wulli...  ";           $wulli-&gt;hit();
print "Peter sagt: ";                        $peter-&gt;say();

print "\nWulli und Peter sind ein und der selbe!\n";

print "\n";
exit 0;</pre>
<p>Hier der Output:</p>
<pre> Wulli &#038; Peter  -  Das Singleton-Pattern
***************************************

Wir machen uns einen Wulli.
Wir machen uns einen Peter.

Wulli sagt: Ich bin ein einzelgaenger. Mich gibt es nur einmal, egal
wie oft du mich instanzierst, du bekommst immer: einzelgaenger=HASH(0x8968c28)
Peter sagt: Ich bin ein einzelgaenger. Mich gibt es nur einmal, egal
wie oft du mich instanzierst, du bekommst immer: einzelgaenger=HASH(0x8968c28)

Wir schlagen Wulli...  *klaps!*
Peter sagt: AUTSCH! Ich sag nichts mehr, du!

Wulli und Peter sind ein und der selbe!</pre>
<p>Und hier dasselbe in Ruby. Es zeigt wieder mal, dass Ruby die ideale Sprache ist für schreib- und denkfaule Admins wie ich einer bin:</p>
<pre>#!/usr/bin/env ruby

require 'singleton'

class Einzelgaenger

  include Singleton

  def id_ausgeben
    self.object_id
  end

end

peter = Einzelgaenger.instance
wullie = Einzelgaenger.instance

print "Peter sagt: \"Hallo, ich bin der Peter, meine ID ist: #{peter.id_ausgeben}!\"\n"
print "Wullie meint dazu: \"Hmmm...seltsam, mein ID ist: #{wullie.id_ausgeben}!?!\"\n"

print "\nPeter und Wullie sind also ein und derselbe! Von Einzelgaenger kann keine weitere Instanz gebildet werden\n"</pre>
<p>Hier der Output:</p>
<pre>Peter sagt: "Hallo, ich bin der Peter, meine ID ist: -604372568!"
Wullie meint dazu: "Hmmm...seltsam, meine ID ist: -604372568!?!"

Peter und Wullie sind also ein und derselbe! Von Einzelgaenger kann keine weitere Instanz gebildet werden.</pre>
<p>Als nächstes war dann das <a title="Beobachter-Muster" href="http://de.wikipedia.org/wiki/Beobachter_%28Entwurfsmuster%29">Beobachter-Muster</a> dran, aber dazu später mehr&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxhome.ch/geek/singleton-pattern-in-perl-und-ruby/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->