2010年3月19日金曜日

Singletonパターン - VDMで学ぶデザインパターン

VDMで学ぶデザインパターン。最初はSingleton。以前、MVCパターンでフレームワークを書いた時に、モデル部分のデータ保持に使った。

まずは、Singletonのクラス。

class Singleton
instance variables
  private static ins : Singleton := new Singleton();

operations
  private Singleton : () ==> Singleton
  Singleton() == skip;
  
  public static getInstance : () ==> Singleton
  getInstance() == return ins;
  
  public test : () ==> nat
  test() == return 1;
end Singleton

これを使うクラスは以下の通り。

class A
operations
  public t : () ==> nat
  t() ==
    let
      i = Singleton`getInstance()
    in
      return i.test();
end A

上記2つのクラスをVDMToolsで動作させるには、VDMToolsのインタープリタで以下のコマンドを入力してください。

>> init
>> print new A().t()

上記の記述、一見問題なさそうに見えるけど、最新のVDMTools v8.2では正常に動作しない。これは、VDMToolsのインスタンスの扱いに問題があるため。v8.2で動作させるためには、Singletonクラスのコンストラクタを削除すれば大丈夫。そうすると、厳密にはSingletonではなくなるけど、運用でカバーって感じになります。

で、この問題、いま開発中のVDMTools最新版では修正されてますので、次バージョンのリリースまでは、コンストラクタを削除して使ってみてください。

0 コメント:

コメントを投稿