From: Shin-ichiro Hara Date: 2000-06-09T12:21:12+09:00 Subject: [ruby-list:23127] Re: メソッドの中の動きを変える 原です。 |るびきちです。 | |> みなさんに質問があるのですが,あるクラスにおいて, |> 同じメソッドでも設定によっては中の振舞いが全然違う(結果は同じ), |> という物を実現したいのです。 | |いわゆる「透明」なクラスということですね? |うーん、思い付いた方法といえば、継承を使うとか。 | | AbstractDB | / \ | Mysql Csv | |AbstractDBでインターフェースを宣言しておき、 |インスタンス化をサブクラスに任せるというのはどうでしょう? そうすると、Mysql.new するか Csv.new するかもう一度後で選択する 事になりますよね。それでいいならいいのだけど。 別の方法として、Mysql と Csv をモジュールにして、ダイナミックに include する方を選ぶのはどうでしょう。AbstractDB でメソッドは super するか、定義しないでおくわけです。 Object | Mysql --> | <-- Csv | V AbstractDB あるいは、AbstractDB のインスタンスに extend Mysql するか、 extend Csv するか選ばせる手もあります。 AbstractDB | Mysql --> | <-- Csv | V (instance)