Template Method

今日はTemplate Methodです。Perlで実装しました。
http://svn.takatoshi.dyndns.org/public/pattern/trunk/templatemethod/
テンプレートっていうのはいろんな文字や記号の形に型が切ってあるプラスチックのあれです。それをなぞると文字や記号がきれいに書けます。このパターンでも同じでTemplate Methodという型(メソッド、処理)が切ってある親クラス(AbstractClassと呼ぶ)を継承して、型通りの処理を行う、というものです。AbstractClassではテンプレート役のメソッドの他に、その中から呼び出す抽象クラスを宣言しておきます。これを実装するのはサブクラスの役目です。そうすると処理の流れ(枠組み)は共通だけど処理の内容はサブクラスごとに違うということになります。同じ処理をそれぞれのクラスに書くのはバッドなのでそれを親クラスで定義してしまいましょう。そうすると修正する場合も一カ所だけで済むしね、というのが一番のメリットなのかな。
まあ、Perlの場合は抽象クラスがないのでただ単にそれっぽくやるだけですが。
それよりも、今回の例題で日本語の文字数を数える必要があったんだけど、ただ単にPerlのlengthを使うだけだとバイト数をカウントしてしまいました(コードはutf-8で書いたので1文字が3バイト)。せっかくなのでその辺のことをググって勉強。簡単に言うとuse utf8;としておくと文字単位でカウントしてくれるようです。ただしPerl 5.8以降限定とのこと。
Perl 5.8 以降においての Unicode 文字列の扱い方 : NDO::Weblog
現実的にはこの辺はフレームワークが吸収するべきでしょうね。仕事で使ってるライブラリはこの辺をうまいこと吸収してくれるのですが、こういうときに改めて便利さを実感します。