#2固体 - 打开近亲原则| Swift | iOS开发
#编程 #ios #swift

它指出软件实体(类,模块,功能等)
应开放以进行扩展,但要修改。

  • 在下面的示例中,Shape类违反了Open-Closed Principle,因为它没有用于修改。
  • 每当添加新形状(例如,三角形,矩形)时,就需要修改形状类,以在形状型枚举中包含新案例,并相应地更新区域()方法。
  • 这违反了该原则,因为该类未关闭以进行修改。
enum ShapeType {
    case circle
    case square
}

class Shape {
    var type: ShapeType

    init(type: ShapeType) {
        self.type = type
    }

    func area() -> Double {
        switch type {
        case .circle:
            // Calculate circle area
            return 3.14 * 5 * 5
        case .square:
            // Calculate square area
            return 10 * 10
        }
    }
}
let shapes: [Shape] = [Shape(type: .circle), Shape(type: .square)]
  • 在下面的示例中,正确应用开放式原理。
  • 形状协议定义了形状的合同,不同形状(例如,圆圈和正方形)实现了形状协议,并提供了自己的区域()方法的实现。
  • 现在,如果要添加一个新形状(例如,三角形),可以简单地创建一个符合形状协议的新结构,而无需修改任何现有代码。
  • 这遵守开放式原理,因为该代码已关闭以进行修改,但要进行扩展。
enum ShapeType {
    case circle
    case square
}

protocol Shape {
    func area() -> Double
}

struct Circle: Shape {
    func area() -> Double {
        // Calculate circle area
        return 3.14 * 5 * 5
    }
}

struct Square: Shape {
    func area() -> Double {
        // Calculate square area
        return 10 * 10
    }
}
let shapes: [Shape] = [Circle(), Square()]