// Follows SRP
class UserManager {
func createUser() {
// Logic to create user
}
}
class EmailManager {
func sendEmail() {
// Logic to send email
}
}
// Follows OCP
protocol Shape {
func area() -> Double
}
class Rectangle: Shape {
func area() -> Double {
return width * height
}
}
class Circle: Shape {
func area() -> Double {
return .pi * radius * radius
}
}
// Follows LSP
class Bird {
func move() {
// General movement logic
}
}
class Penguin: Bird {
override func move() {
swim()
}
func swim() {
// Logic for swimming
}
}
// Follows ISP
protocol Worker {
func work()
}
protocol Eater {
func eat()
}
class Robot: Worker {
func work() {
// Robot working logic
}
}
// Follows DIP
protocol Storage {
func saveData()
}
class FileStorage: Storage {
func saveData() {
// Logic to save data to a file
}
}
class DataManager {
let storage: Storage
init(storage: Storage) {
self.storage = storage
}
func save() {
storage.saveData()
}
}