開放封閉原則 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