Advertisement
Guest User

Patterns

a guest
Apr 28th, 2015
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.87 KB | None | 0 0
  1. protocol RemoteAccess {
  2. func addGadjet(gadjet: Entity)
  3. func removeGadjet(gadjet: Entity)
  4. func notifyGadjets(globalColor newColor: String)
  5. }
  6.  
  7. protocol Entity {
  8. var name: String { get set}
  9. var isOn: Bool { get set }
  10. var color: String? { get }
  11. var owner: RemoteAccess? { get set }
  12.  
  13. func updateColor(newColor: String)
  14.  
  15. func switchState(isOn: Bool) -> Bool
  16. }
  17.  
  18. class Owner: RemoteAccess {
  19. var globalColor: String = "#FF00FF" {
  20. willSet(newValue) {
  21. notifyGadjets(globalColor: newValue)
  22. }
  23. }
  24. var gadjets = [Entity]()
  25. class var sharedInstance: Owner {
  26. struct Static {
  27. static var instance: Owner?
  28. }
  29. if Static.instance == nil {
  30. Static.instance = Owner()
  31. }
  32.  
  33. return Static.instance!
  34. }
  35.  
  36. func addGadjet(toInsert: Entity){
  37. var found = false
  38. for gadjet in gadjets {
  39. if toInsert.name == gadjet.name {
  40. println("Already added")
  41. found = true
  42. }
  43. }
  44. if !found {
  45. gadjets.append(toInsert)
  46. }
  47. }
  48. func removeGadjet(toRemove: Entity) {
  49. var i = 0
  50. for gadjet in gadjets {
  51. if gadjet.name == toRemove.name {
  52. println(gadjet.name)
  53. println(toRemove.name)
  54. gadjets.removeAtIndex(i)
  55. break
  56. }
  57. i++
  58. }
  59. }
  60. func notifyGadjets(globalColor newColor: String) {
  61. for gadjet in gadjets {
  62. gadjet.updateColor(newColor)
  63. }
  64. }
  65. }
  66.  
  67.  
  68. class Gadjet: Entity {
  69. var type: String
  70. var name: String
  71. var isOn: Bool = false
  72. var color: String?
  73. var owner: RemoteAccess?
  74.  
  75. func updateColor(newColor: String) {
  76. color = newColor
  77. }
  78.  
  79. func switchState(isOn: Bool) -> Bool {
  80. if isOn { self.isOn = false }
  81. else { self.isOn = true }
  82. return self.isOn
  83. }
  84.  
  85. init(name: String, type: String) {
  86. self.name = name
  87. self.type = type
  88. }
  89. }
  90.  
  91. class Light: Gadjet {
  92. init(name: String) {
  93. super.init(name:name, type: "Light")
  94. }
  95.  
  96. }
  97.  
  98.  
  99.  
  100.  
  101. var owner = Owner.sharedInstance
  102. var light = Light(name: "Hallway light")
  103. println(light.type)
  104.  
  105.  
  106. var fridge = Gadjet(name: "Bedroom Fridge", type: "Fridge")
  107. var bed = Gadjet(name: "Bathroom Bed", type: "Bed")
  108.  
  109. owner.addGadjet(fridge)
  110. owner.addGadjet(bed)
  111.  
  112. owner.addGadjet(fridge)
  113.  
  114. println(owner.gadjets)
  115.  
  116.  
  117. owner.globalColor = "#FF00FF"
  118.  
  119. println(bed.color!)
  120. println(fridge.color!)
  121.  
  122. owner.globalColor = "#FFF000"
  123.  
  124. println(bed.color!)
  125. println(fridge.color!)
  126.  
  127.  
  128.  
  129. // println(owner.gadjets[0].name)
  130. // println(fridge.name)
  131.  
  132. // if owner.gadjets[0].name == fridge.name {
  133. // println("equal")
  134. // }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement