1. 程式人生 > 其它 >軟體架構設計原則之開閉原則

軟體架構設計原則之開閉原則

開閉原則(Open-Closed Principle,OCP)是指一個軟體實體(如類、模組和函式)應該對擴充套件開放,對修改關閉。所謂的開閉,也正是對擴充套件和修改兩個行為的一個原則。它強調的是用抽象構建框架,用實現擴充套件細節,可以提高軟體系統的可複用性及可維護性。開閉原則是面向物件設計中最基礎的設計原則,它指導我們如何建立穩定、靈活的系統。例如版本更新,我們儘可能不修改原始碼,但是可以增加新功能。
在現實生活中開閉原則也有體現。比如,很多網際網路公司都實行彈性作息時間,只規定每天工作8小時。意思就是說,對於每天工作8小時這個規定是關閉的,但是你什麼時候來、什麼時候走是開放的。早來早走,晚來晚走。
開閉原則的核心思想就是面向抽象程式設計,接下來我們來看一段程式碼。
以咕泡學院的課程體系為例,首先建立一個課程介面ICourse:

public interface ICourse {
  Integer getId();
  String getName();
  Double getPrice();
}

整個課程生態有Java架構、大資料、人工智慧、前端、軟體測試等,我們來建立一個Java架構課程的類JavaCourse:

public class JavaCourse implements ICourse{
  private Integer Id;
  private String name;
  private Double price;
  public JavaCourse(Integer id, String name, Double price) {
    this.Id = id;
    this.name = name;
    this.price = price;
  }
  public Integer getId() {
    return this.Id;
  }
  public String getName() {
    return this.name;
  }
  public Double getPrice() {
    return this.price;
  }
}

現在我們要給Java架構課程做活動,價格優惠。如果修改JavaCourse中的getPrice()方法,則存在一定的風險,可能影響其他地方的呼叫結果。我們如何在不修改原有程式碼的前提前下,實現價格優惠這個功能呢?現在,我們再寫一個處理優惠邏輯的類JavaDiscountCourse(思考一下為什麼要叫JavaDiscountCourse,而不叫DiscountCourse):


public class JavaDiscountCourse extends JavaCourse {
  public JavaDiscountCourse(Integer id, String name, Double price) {
    super(id, name, price);
  }
  public Double getOriginPrice(){
    return super.getPrice();
  }
  public Double getPrice(){
    return super.getPrice() * 0.61;
  }
}

回顧一下,簡單看一下類結構圖,如下圖所示。

本文為“Tom彈架構”原創,轉載請註明出處。技術在於分享,我分享我快樂!
如果本文對您有幫助,歡迎關注和點贊;如果您有任何建議也可留言評論或私信,您的支援是我堅持創作的動力。關注微信公眾號“Tom彈架構”可獲取更多技術乾貨!