TemplateMethod
デザインパターンとは
デザインパターンとはオブジェクト思考開発における先人たちが作り上げてきた便利な設計図です。
Gang of Four通称Gofが1994年に出版した『オブジェクト指向における再利用のためのデザインパターン』の中で23個の設計図が紹介されています。
Note
デザインパターンのサンプルコードはSwift4でまとめます。
テンプレートメソッドパターンとは?
TemplateMethondパターンは抽象的な処理のアルゴリズムを作成するパターンで、子クラスで細かい処理の中身を実装します。
継承を用いて必要最低限の処理でコードを実装することができます。
サンプルコード
突然ですが、私には弟がいます。2人の1日の生活をテンプレートメソッドパターンを使って実現します。
Swiftには抽象クラスがないので大まかな流れをプロトコルで実現します。今回は1日の生活を表現するために4つのメソッドを作成しました。
プロトコル内には実装を記述できないためextensionでテンプレートの処理を記述しています。
1.起床時間
2.仕事
3.就寝時間
4.1日の流れ(テンプレートメソッド)
プログラムにするとこのようになります。
テンプレート
protocol LifeCycle {
func getUpTime()
func Work()
func bedTime()
}
extension LifeCycle {
func oneDay(){
getUpTime()
Work()
bedTime()
}
}
これでテンプレートは完成です。テンプレートのoneDayでは抽象メソッドであるgetUpTime,Work, bedTimeを実行しています。
私harumiと弟yamatoのクラスを作成します。2つのクラスはLifeCycleを準拠させ、getUpTime, Work, bedTimeの処理を実装します。
準拠させたクラス
class Harumi: LifeCycle {
func getUpTime() {
print("8:30に起きる")
}
func Work() {
print("プログラミングをする")
}
func bedTime() {
print("24時に寝る")
}
}
class Yamato: LifeCycle {
func getUpTime() {
print("5:00に起きる")
}
func Work() {
print("船の整備をする")
}
func bedTime() {
print("20時に寝る")
}
}
呼び出し
var harumi = Harumi()
harumi.oneDay()
print(">>>>>>>>>>>>>>>>")
var yamato = Yamato()
yamato.oneDay()
LifeCycleに準拠しているのでoneDayメソッドを呼ぶことができます。
コンソールにはこのように出力されます。
8:30に起きる
プログラミングをする
24時に寝る
>>>>>>>>>>>>>>>>
5:00に起きる
船の整備をする
20時に寝る
参考文献
【Swift】 protocolを利用して、抽象クラスの振る舞いをさせる方法