オタクのブ。

〜 オタクが発信する(たまには)役に立つ情報とオタク観察日記 〜
<< Rubyの勉強:まつもと直伝 プログラミングのオキテ 第1回(3):ITpro | main | SSDドライブにしてみました:VAIO PCG-SRX3/BD >>

スポンサーサイト

スポンサードリンク

一定期間更新がないため広告を表示しています

スポンサードリンク
- | permalink | - | -

Singletonパターン

JUGEMテーマ:コンピュータ
 
Rubyを勉強しようと思った理由にオブジェクト指向プログラムのプロトタイピングというものがあるが、どのような表現力があるかどうか試してみるためにデザインパターンのサンプルプログラムをRubyで書いてみようと思う。デザインパターンについては、@ITの記事でも紹介されているので参考にさせていただいた。

まつもと直伝 プログラミングのオキテ 第8回
http://itpro.nikkeibp.co.jp/article/COLUMN/20070608/274002/?ST=oss&P=3

Singletonだが、実現の方法はいろいろあるがもともとこのパターンが必要になるのは、本来インスタンスを1つしか生成してほしくないクラスに対して制限をつけることだと思う。そう思うと、Singletonライブラリはこれに必要な振る舞いを簡単に実装できるのですぐれている。サンプルプログラムを作ってみた。

#Singleton Pattern
require 'singleton'

class SingletonClass
  include Singleton

  #for test
  attr_accessor :test
end

attr_accessorは、Classのメソッドでsetterやgetterを生成してくれる。rubyの特異メソッドとか、ブロックって使い方によっては、別の言語もどきを作れてしまうようですが、これってちょっと怖いなぁって思ってみたり(知らない人が見ると、意味不明なコードになりそうなので)。
以下は、テストコードです。test_twoObjectでは2つのインスタンスを作成して、属性を互いに変更しているが実体は同じなので、t2を変更するとt1も変更される。test_newでは、newメソッドによってオブジェクトを生成しようとしているが、例外NoMethodErrorが発生している。

require 'test/unit'
require 'design' #target code

class TC_Singleton < Test::Unit::TestCase
  #def setup
  #end
 
  #def teardown
  #end
 
  def test_twoObject
    t1=SingletonClass.instance
    t1.test="t1"
    assert_equal("t1", t1.test)
    t2=SingletonClass.instance
    t2.test="t2"
    assert_equal("t2", t1.test)
    assert_equal("t2", t2.test)
  end
 
  def test_new
    begin
      t3=SingletonClass.new
    rescue => evar
      assert(evar.instance_of?(NoMethodError))
    end
  end
end
サンプルプログラムを作るときに例外処理について勉強した。やっぱり実際にプログラムを作ってみると学べることが多くてよいですね。

 
システム開発 | permalink | comments(0) | trackbacks(0)

スポンサーサイト

- | permalink | - | -

この記事に対するコメント

コメントする









この記事のURL

http://spw.jugem.jp/?eid=843 [記事を編集する]
この記事のトラックバックURL
トラックバック機能は終了しました。
※注意:スパム対策のため、この記事のURLへのリンクのないトラックバックはすべて受付できません。
この記事に対するトラックバック