Ioのサンプルコードのページを見てみるとSingletonパターンのコードがあります。
プロトタイプベース言語のせいか超シンプル。
Foo := Object clone
Foo clone := Foo
それで他のデザインパターンをIoで書いたらどうなんのかなー,ということでやってみることにしました。
まずはDecorator。そんなに使ったことないけど,何となく好きなパターン。以下のコードでは文字列を出力する処理をデコレートして,"-"とか"[]"とかで前後から挟むようにしてみました。
Component := Object clone do(
printString := method(str, str println)
)
Decorator := Component clone do(
component := Component
printString := method(str,
component printString(str)
)
)
// add "[]"
BracketDecorator := Decorator clone do(
printString := method(str,
str = "[" .. str .. "]"
component printString(str)
)
)
// add "--"
DashDecorator := Decorator clone do(
printString := method(str,
str = "-" .. str .. "-"
component printString(str)
)
)
// インスタンス作成
comp := Component clone
bd := BracketDecorator clone
dd := DashDecorator clone
dd component = comp
bd component = dd
writeln(">> Bracket -> Dash")
bd printString("Decorator")
// "-[Decorator]-"と表示される
こんな感じで良いのかな? 本当はDecoratorの派生クラスの場合は"component printString()"じゃなくて,"self proto printString()"という書き方をやんなきゃいけないんだけど(componentとDecoratorの仕組みをカプセル化するため),それだと何故か上手くいかなかった。ComponentのprintString()まで処理がいかないみたいで。
まぁ,こんな感じでGoFのデザインパターンをIoで書いてこうかと思います。
【参考リンク】
デザインパターン[モデリング] -TECHSCORE-
デザパタの元ネタはここを参考にさせてもらってます。
i d e a * i d e a - ブログにコードを貼り付ける方法で悩むの巻
ここで紹介されてる方法を使ってコードを貼り付けてみました
0 件のコメント:
コメントを投稿