美文网首页iOS开发
设计模式与软件原则 (二):SOLID 原则

设计模式与软件原则 (二):SOLID 原则

作者: _浅墨_ | 来源:发表于2022-02-19 20:04 被阅读0次
SOLID 设计原则

SOLID 设计原则鼓励我们创建更易于维护、更易于理解和更灵活的软件。

  1. 单一职责原则(Single Responsibility Principle)

实体应承担一项责任。

  1. 开闭原则(Open-Closed Principle)

实体应该对 extension 开放但对修改(modification) 关闭。

  1. 里氏替换原则(Liskov Substitution Principle)

如果类 A 是类 B 的子类型,那么我们应该能够用 A 替换 B 而不会破坏程序的行为。

  1. 接口隔离(Interface Segregation)

实体不应使用他们不会完全使用的接口。大接口应该拆分成更小的接口。

  1. 依赖倒置(Dependency Inversion)

高级模块不应该依赖于低级模块,两者都应该依赖于抽象。

下面我们来看代码示例:

// 一、单一职责原则(Single Responsibility Principle)

class User {
    
    var name: String
    var profileName: String
    
    init(name: String, profileName: String) {
        self.name = name
        self.profileName = profileName
    }
    
    func changeName(to name: String) {
        self.name = name
    }
    
    func changeProfileName(to profileName: String) {
        self.profileName = profileName
    }
    
}

struct Account {
    
    var user: User
    
    init(user: User) {
        self.user = user
    }
    
    func createAccount() {
        print("account created")
    }
    
    func loginAccount() {
        print("logged into account")
    }
    
    func logoutAccount() {
        print("logged out of account")
    }
    
}

//二、开闭原则

class Guitar {
    
    var brandName: String
    var model: String
    
    init(brandName: String, model: String) {
        self.brandName = brandName
        self.model = model
    }
    
}

class FlameGuitar: Guitar {
    var flame: String = "Red"
}

protocol Instrument {
    var brandName: String { get set }
    var model: String { get set }
}

class BassGuitar: Instrument {
    
    var brandName: String
    var model: String
    
    init(brandName: String, model: String) {
        self.brandName = brandName
        self.model = model
    }
    
}

class WaterGuitar: Instrument {
    
    var brandName: String
    var model: String
    var waterVolume: Int
    
    init(brandName: String, model: String, waterVolume: Int) {
        self.brandName = brandName
        self.model = model
        self.waterVolume = waterVolume
    }
    
}

// 三、里氏替换原则(Liskov Substitution Principle)
protocol Polygon {
    var area: Float { get }
}

class Rectangle: Polygon {
    
    var width: Float = 0
    var length: Float = 0
    
    init(length: Float, width: Float) {
        self.length = length
        self.width = width
    }
    
    var area: Float {
        return width * length
    }
    
}

class Square: Polygon {
    
    var side: Float = 0 

    init(side: Float) {
        self.side = side
    }
    
    var area: Float {
        return side * side
    }
    
}

func printArea(ofPolygon polygon: Polygon) {
    print(polygon.area)
}

let rectangle = Rectangle(length: 10, width: 2)
printArea(ofPolygon: rectangle)
let square = Square(side: 2)
printArea(ofPolygon: square)

// 四、接口隔离(Interface Segregation)
protocol Vehicle {
    func accelerate()
}

protocol Engine {
    func turnEngineOn() 
}

class MotorCar: Vehicle, Engine {
    
    func turnEngineOn() {  
        print("engine on!")
    }
    
    func accelerate() {
        print("going faster")
    }
}

class HorseDrawnCarriage: Vehicle {
    func accelerate() {
        print("going faster")
    }
}

// 五、依赖倒置(Dependency Inversion)
protocol CloudService {
    func fetchData(url: String) -> [String]
}

struct FirebaseService: CloudService {
    
    func observeSingleEvent(forRef: String) -> [String] {
        return ["Post"]
    }
    
    func fetchData(url: String) -> [String] {
        return observeSingleEvent(forRef: url)
    }
}

struct ParseService: CloudService {
    
    func fetchData(url: String) -> [String] {
        return ["Post"]
    }
}

class UserFeed {
    
    private let data: CloudService
    
    init(data: CloudService) {
        self.data = data
    }
    
    func getUserFeedData(url: String) {
        data.fetchData(url: url)
    }
}

let parseService = ParseService()
let userFeedService = UserFeed(data: parseService)
userFeedService.getUserFeedData(url: "url")

相关文章

  • 设计模式与软件原则 (二):SOLID 原则

    SOLID 设计原则 SOLID 设计原则鼓励我们创建更易于维护、更易于理解和更灵活的软件。 单一职责原则(Sin...

  • JAVA设计模式原则

    一、Solid原则 介绍设计模式中的SOLID原则,分别是单一原则、开闭原则、里氏替换原则、接口隔离原则、依赖倒置...

  • 设计模式初照面

    五大设计原则 设计原则是设计模式的指导理论,它可以帮助我们规避不良的软件设计。SOLID 指代的五个基本原则分别是...

  • 关于SOLID原则简单理解

    关于软件的设计原则其实很多,其中比较经典的有SOLID、KISS、YAGNI、DRY、LOD 等。SOLID原则并...

  • 01-设计模式原则

    面向对象的设计原则 面向对象的设计原则也被称为SOLID。SOLID原则包括单一职责原则、开闭原则、里氏替换原则、...

  • 今日份打卡 119/368

    技术文章软件设计原则SOLID单一职责原则里氏替换原则依赖倒置原则接口隔离原则迪米特法则开放封闭原则

  • JavaScript 中的 SOLID 原则(一):“S”代表什

    你可能已经了解过一些设计原则或者设计模式,本文主要渐进的讲解了SOLID原则: 不使用SOLID是怎么编写代码的,...

  • 什么是SOLID 原则 2020-03-10

    设计模式中的SOLID原则,分别是单一原则、开闭原则、里氏替换原则、接口隔离原则、依赖倒置原则。前辈们总结出来的,...

  • 面向对象设计原则(SOLID)

    SOLID 是面向对象设计重要原则的首字母缩写.当我们设计类和模块时,遵守 SOLID 原则可以让软件更加健壮和稳...

  • Kotlin 设计模式及实战

    面向对象的设计原则也被称为SOLID。在设计和开发软件时可以应用这些原则,以便创建易于维护和开发的程序。SOLID...

网友评论

    本文标题:设计模式与软件原则 (二):SOLID 原则

    本文链接:https://www.haomeiwen.com/subject/gzmslrtx.html