おーみんブログ

C#, ASP.NET Core, Unityが大好きです。

VB.NETでTemplate Methodパターンを体験してみた。

はじめに

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メソッドを作る必要がありますので少し複雑になってしまいそうです(まあ、このサンプルコード程度ではそんなに複雑さは感じませんが...)。 なるべく似たような処理は共通化していくよう心掛けていきます!!