-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathOpenClosedPrinciple
More file actions
50 lines (43 loc) · 1.16 KB
/
Copy pathOpenClosedPrinciple
File metadata and controls
50 lines (43 loc) · 1.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import UIKit
//SOLID PRINCIPLE - 2 - OPEN CLOSE PRINCIPLE
protocol Printable {
func printDetails() -> String
}
//OPEN FOR EXTENSION, BUT CLOSED FOR MODIFICATION.
class Logger {
static var logs: [Printable] = [ ]
static func printData() {
logs.forEach { log in
print(log.printDetails()) //STRATERGY PATTERN (printDetails() called on fly based on object type)
}
}
}
class Car: Printable {
let name: String
let color: String
init(name: String, color: String) {
self.name = name
self.color = color
Logger.logs.append(self)
}
func printDetails() -> String {
return "I'm \(name) and my color is \(color)"
}
}
class Bicycle: Printable {
let type: String
init(type: String) {
self.type = type
Logger.logs.append(self)
}
func printDetails() -> String {
return "I'm a \(type)"
}
}
let car1 = Car(name: "BMW", color: "white")
let car2 = Car(name: "Mustang", color: "white")
let car3 = Car(name: "Tesla", color: "white")
let car4 = Car(name: "Honda", color: "white")
let b1 = Bicycle(type: "TATA")
let b2 = Bicycle(type: "NanoBot")
Logger.printData()