Template Method パターン
https://ja.wikipedia.org/wiki/Template_Method_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3
ある処理のおおまかなアルゴリズムをあらかじめ決めておいて、そのアルゴリズムの具体的な設計をサブクラスに任せる。
swiftでの実装例
今のところ、protected
もabstract
も無い。abstract methodに相当する部分は異常終了するようにしおいてサブクラスでoverrideしてもらう。
Apple Swift version 1.2 (swiftlang-602.0.53.1 clang-602.0.53) Target: x86_64-apple-darwin14.5.0
class TaggedMessage { func taggedMessage(msg: String) -> String { return openingTag() + msg + closingTag() } func openingTag() -> String { return abend()! } func closingTag() -> String { return abend()! } func abend() -> String? { println("pleeeeeease override!!!!!"); return nil } } class ItalicMessage : TaggedMessage { override func openingTag() -> String { return "<i>" } override func closingTag() -> String { return "</i>" } } class AlertMessage : TaggedMessage { override func openingTag() -> String { return "<font size=\"30\" color=\"#ff0000\">" } override func closingTag() -> String { return "</font>" } } for obj: TaggedMessage in [ItalicMessage(), AlertMessage()] { println(obj.taggedMessage("message!")) } TaggedMessage().taggedMessage("abend!")