山口です。

> 市田です。
> 設計、I/Fの是非はともかく、上のことをあまり手間をかけずに実現するとし
て

下記のスクリプト、私の頭では到底思い浮かばなかいので、目から鱗でした。
method_missingを用いたり、class そのものを引数にできる等...、super も...

したいと思っていた内容そのもので、大変勉強になりました。
ご教示ありがとうございます。

>    class StubMethod
>      def initialize(obj)
>        @obj = obj
>      end
> 
>      def method_missing(name, *args)
>        super unless @obj.respond_to? name
>        puts "#{name} does not work"
>      end
>    end
> 
>    class Render
>      def play
>        puts "Render#play"
>      end
>    end
> 
>    class Device
>      attr_reader :render
>      def initialize(device, is_nw_in)
>        @device = device
>        render = Render.new
>        @render = if is_nw_in
>                     render
>                  else
>                     StubMethod.new(render)
>                  end
>      end
>    end
> 
> という方法はどうでしょう。
> Render のインスタンスを生成して、そのインスタンスが応答できるメソッド
> が呼ばれたら何らかのメッセージを出すというものです。
> 応答できないもの=Render にないメソッドを呼び出したときは、いつもどお
り
> NoMethodError になります。
> 
> もしくは, class を引数にするのでも良いです。
> 
>    class StubMethod
>      def initialize(klass)
>        @klass = klass
>      end
> 
>      def method_missing(name, *args)
>        super unless @klass.instance_methods.include? name
>        puts "#{name} does not work"
>      end
>    end
> 
>    class Device
>      attr_reader :render
>      def initialize(device, is_nw_in)
>        @device = device
>        @render = if is_nw_in
>                     Render.new
>                  else
>                     StubMethod.new(Render)
>                  end
>      end
>    end
> 
> ではでは。
> 
> 
>