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ï¼")