開放封閉原則 C.
在這裡,我們嘗試使用程式碼庫來解釋 OCP。首先,我們將展示違反 OCP 的方案,然後我們將刪除該違規。
面積計算(OCP 違規程式碼):
public class Rectangle{
public double Width {get; set;}
public double Height {get; set;}
}
public class Circle{
public double Radious {get; set;}
}
public double getArea (object[] shapes){
double totalArea = 0;
foreach(var shape in shapes){
if(shape is Rectangle){
Rectangle rectangle = (Rectangle)shape;
totalArea += rectangle.Width * rectangle.Height;
}
else{
Circle circle = (Circle)shape;
totalArea += circle.Radious * circle.Radious * Math.PI;
}
}
}
現在,如果我們需要計算另一種型別的物件(比如,Trapezium),那麼我們就要新增另一個條件。但是從 OCP 規則我們知道應該關閉軟體實體進行修改。所以它違反了 OCP。
好。讓我們嘗試解決實施 OCP 的這種違規行為。
public abstract class shape{
public abstract double Area();
}
public class Rectangle : shape{
public double Width {get; set;}
public double Height {get; set;}
public override double Area(){
return Width * Height;
}
}
public class Circle : shape{
public double Radious {get; set;}
public override double Area(){
return Radious * Radious * Math.PI;
}
}
public double getArea (shape[] shapes){
double totalArea = 0;
foreach(var shape in shapes){
totalArea += shape.Area();
}
return totalArea;
}
現在如果我們需要計算另一種型別的物件,我們不需要改變邏輯(在 getArea()
中),我們只需要新增另一個類,如 Rectangle 或 Circle 。