軟體架構設計原則之開閉原則
開閉原則(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彈架構”可獲取更多技術乾貨!