它指出软件实体(类,模块,功能等)
应开放以进行扩展,但要修改。
- 在下面的示例中,
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()]