3
LSP是SOLID中最難以正確理解的。Liskov替代原理示例
LSP指出程序中的對象應該可以用其子類型的實例替換而不會改變程序的正確性。
因此,如果我們有這樣的典型的矩形 - 方形例如:
rect = new Rectangle();
rect.width = 10;
rect.height = 20;
,然後我們試圖對它進行測試:
assert 10 == rect.width
assert 20 == rect.height
一切正常,但當我們試圖說廣場矩形以及我們使用:
rect = new Square();
廣場實際上有高度和寬度都相同,這將馬ke測試失敗。
那麼我們如何解決這個問題呢?在這種情況下,我們爲Square和Rectangle分類以避免LSP問題?