Singleton パターン
Singleton パターンを実装してみました。
#!/usr/local/bin/ruby class Singleton private_class_method :new @@instance = nil def Singleton.instance @@instance = new unless @@instance @@instance end end object1 = Singleton.instance object2 = Singleton.instance p object1 p object2
- private_class_method で Singleton#new を実行禁止にする
- クラスメソッドの定義の仕方 = def Singleton.method ... end
の二点がポイントです。実行結果は
$ ruby singleton.rb #<Singleton:0x357d00> #<Singleton:0x357d00>
となりました。確かに object1 と object2 は同じインスタンスです。
ところで、Ruby には Singleton パターン用のモジュールがあります。モジュールを include するだけでそのクラスが Singleton になります。
#!/usr/local/bin/ruby require 'singleton' class World include Singleton end world1 = World.instance world2 = World.instance p world1 p world2
Singleton パターン以外のデザインパターン用ライブラリとしては
- Delegate パターン
- Observer パターン
用のモジュールが標準サポートされているようです。手元にある Ruby デスクトップリファレンスに掲載されていたのはこの三つです。Ruby デスクトップリファレンスは 1.6 向けなので、1.8 には他にも追加されているのかもしれません。
- 作者: まつもとゆきひろ
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2000/11
- メディア: 単行本
- 購入: 1人 クリック: 10回
- この商品を含むブログ (19件) を見る