alias を使った Adapter パターン
ruby には alias 式でメソッド、演算子、グローバル変数、正規表現後方参照の別名を作ることができるようです。Adapter パターン を Ruby っぽくするために alias を使って書き替えてみます。
#!/usr/local/bin/ruby class Banner def initialize(string) @string = string end def show_with_paren puts "(#@string)" end def show_with_aster puts "*#@string*" end end class PrintBanner < Banner alias print_weak show_with_paren alias print_strong show_with_aster end p = PrintBanner.new("Hello") p.print_weak p.print_strong
これでうまくいきました。元のコードが Banner#show_with_paren を PrintBanner#print_weak に委譲しているだけだったので alias を使ってみた、というものです。
わざわざ PrintBanner を用意しなくても
class Banner alias print_weak show_with_paren alias print_strong show_with_aster end
でも良いかもしれません。後からいくらでもクラスの挙動を変えられるのが動的言語の良いところです。
ところでこの alias、文法的には「新しい名前 古い名前」の順ですが、なんとなく逆の方が直感的な気がします。しかしこの順になっているのは UNIX の alias コマンドを意識しているからなのでしょうか。