はじめに
GoFのデザインパターンの1つであるTemplate Methodパターンを体験してみました。
Template Methodパターンとは
Template Methodパターンとはスーパークラスで処理の枠組みを決めてそれを継承したサブクラスで具体的な処理を書いていくというパターンです。同じような流れの処理を複数書く時などに利用できます。
サンプルコード
以下にサンプルコードを記載します。 スーパークラス(Templateクラス)のPlayメソッドにて朝昼夜の処理の流れを決めます。 その後、Templateクラスを継承した平日クラス(Weekday)と休日クラス(Holiday)にて具体的な処理を書いています。
Module Program Sub Main() Console.WriteLine("平日の過ごし方") Dim weekday As Template = As New Weekday() weekday.Play() Console.WriteLine("-------------------") Console.WriteLine("休日の過ごし方") Dim holiday As Template = As New Holiday() holiday.Play() End Sub End Module 'スーパークラスで処理の骨組みを作ります。 Public MustInherit Class Template Protected MustOverride Sub Morning() Protected MustOverride Sub Afternoon() Protected MustOverride Sub Night() Public Sub Play() Morning() Afternoon() Night() End Sub End Class 'サブクラスで継承した処理の肉付けを行います。 Public Class Weekday Inherits Template Protected Overrides Sub Morning() Console.WriteLine("朝:行きの電車に乗る") End Sub Protected Overrides Sub Afternoon() Console.WriteLine("昼:会社でお仕事をする") End Sub Protected Overrides Sub Night() Console.WriteLine("夜:帰りの電車に乗る") End Sub End Class 'サブクラスで継承した処理の肉付けを行います。 Public Class Holiday Inherits Template Protected Overrides Sub Morning() Console.WriteLine("朝:朝寝をする") End Sub Protected Overrides Sub Afternoon() Console.WriteLine("昼:昼寝をする") End Sub Protected Overrides Sub Night() Console.WriteLine("夜:夜寝をする") End Sub End Class
平日の過ごし方 朝:行きの電車に乗る 昼:会社でお仕事をする 夜:帰りの電車に乗る ------------------- 休日の過ごし方 朝:朝寝をする 昼:昼寝をする 夜:夜寝をする
おわりに
仮にTemplateメソッドを使わずに同じ実装をしようとすると、WeekdayクラスとHolidayクラスにPlayメソッドを作る必要がありますので少し複雑になってしまいそうです(まあ、このサンプルコード程度ではそんなに複雑さは感じませんが...)。 なるべく似たような処理は共通化していくよう心掛けていきます!!