今更デザパタ:Adapter
テストケース
[]require[] []'[][]test/unit[][]'[] []require[] []'[][]adapter[][]'[] []class [][]TestAdapter[] []<[] []Test[][]::[][]Unit[][]::[][]TestCase[] []def [][]setup[] []@text[] []=[] []"[][]aaaa[][]"[] []@banner[] []=[] []Banner[][].[][]new[][]([][]@text[][])[] []@print_banner[] []=[] []PrintBanner[][].[][]new[][]([][]@text[][])[] []end[] []def [][]test_banner[] []assert_equal[][]("[][]*[][]#{@text}[][]*[][]",[] []@banner[][].[][]with_aster[][])[] []assert_equal[][]("[][]([][]#{@text}[][])[][]",[] []@banner[][].[][]with_paren[][])[] []end[] []def [][]test_print_banner[] []assert_equal[][]("[][]*[][]#{@text}[][]*[][]",[] []@print_banner[][].[][]strong[][])[] []assert_equal[][]("[][]([][]#{@text}[][])[][]",[] []@print_banner[][].[][]weak[][])[] []end[] []end[]
そして実装
[]# abstract class[] []class [][]Print[] []def [][]weak[] []raise[] []NotImplementedError[][].[][]new[] []end[] []def [][]strong[] []raise[] []NotImplementedError[][].[][]new[] []end[] []end[] []class [][]Banner[] []def [][]initialize[][]([][]string[][])[] []@string[] []=[] []string[] []end[] []def [][]with_aster[] []"[][]*[][]#{@string}[][]*[][]"[] []end[] []def [][]with_paren[] []"[][]([][]#{@string}[][])[][]"[] []end[] []end[] []class [][]PrintBanner[] []<[] []Print[] []def [][]initialize[][]([][]string[][])[] []@banner[] []=[] []Banner[][].[][]new[][]([][]string[][])[] []end[] []def [][]weak[] []@banner[][].[][]with_paren[] []end[] []def [][]strong[] []@banner[][].[][]with_aster[] []end[] []end[]
Adapterパターンは、Wrapperとも言うらし。flickrとかGoogleのAPIを呼び出すときなんかに、毎回XML-RPCよんだりSOAPよんだりするのは面倒なので、Adapter(Wrapper)でメソッドひとつで呼び出せるようにしたりするわけですね。