Skip to content

Instantly share code, notes, and snippets.

@53ningen
Last active February 8, 2016 19:15
Show Gist options
  • Save 53ningen/42e30144104b2d7f8fb6 to your computer and use it in GitHub Desktop.
Save 53ningen/42e30144104b2d7f8fb6 to your computer and use it in GitHub Desktop.
public protocol Service {
func addPrefix(name: String) -> String
}
public class MsService: Service {
public func addPrefix(name: String) -> String { return "Ms." + name }
}
public class MrService: Service {
public func addPrefix(name: String) -> String { return "Mr." + name }
}
public class Client {
private let service: Service //=> コンストラクタから依存オブジェクトを差し込んでもらう
public init(service: Service) { self.service = service } //=> おわかり頂けただろうか...
public func callName(name: String) { print(service.addPrefix(name)) }
}
let client = Client(service: MsService())
client.callName("Cocoa") //=> Ms.Cocoa
@53ningen
Copy link
Author

53ningen commented Feb 8, 2016

protocol C { func appendC(s: String) -> String }
class CImpl: C {
    private let b: B
    init(b: B) { self.b = b }  //� CImpl は B のインスタンスを要求する
    func appendC(s: String) -> String { return b.appendB(s) + "c" }
}

protocol B { func appendB(s: String) -> String }
class BImpl: B {
    private let a: A
    init(a: A) { self.a = a }  //� BImpl は A のインスタンスを要求する
    func appendB(s: String) -> String { return a.appendA(s) + "b" }
}

protocol A { func appendA(s: String) -> String }
class AImpl: A { func appendA(s: String) -> String { return s + "a" } }

let c: C = CImpl(b: BImpl(a: AImpl())) // う〜ん、この・・・。
c.appendC("@")

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment