Sunny軟件公司開發(fā)的CRM系統(tǒng)可以顯示各種類型的圖表,如餅狀圖、柱狀圖等。該系統(tǒng)持續(xù)
Sunny軟件公司開發(fā)的CRM系統(tǒng)可以顯示各種類型的圖表,如餅狀圖、柱狀圖等。該系統(tǒng)持續(xù)改進,用戶希望能夠支持更多類的圖表顯示方式,例如增加LineChart,利用開放閉合原則優(yōu)化如下類的設(shè)計。(說明原因,畫出類圖)
根據(jù)開放閉合原則,對擴展開放,對修改關(guān)閉,我們應(yīng)該盡可能地避免對已有代碼的修改來支持新功能。因此,我們可以采用策略模式來實現(xiàn)該系統(tǒng)的不同圖表類型的支持。我們定義一個Chart接口,包含一個display方法,表示顯示該類型的圖表。然后定義各個類型的具體圖表類實現(xiàn)該接口。這樣,當(dāng)需要增加一種新類型的圖表時,只需要實現(xiàn)一個新的具體圖表類,即可擴展該系統(tǒng)的功能,而不用修改已有代碼。
類圖如下:
```
+---------------------+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? +-------------------+
| ? ? ? ? Chart ? ? ? | ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ? LineChart ? ? |
+---------------------+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?+-------------------+
| ? ? + display() ? ? | ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ? + display() ? |
+---------------------+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?+-------------------+
/\ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?/\
|| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?||
+---------------------+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?+-------------------+
| ? ? PieChart ? ? ? ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? BarChart ? ? ?|
+---------------------+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?+-------------------+
| ? ? + display() ? ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ? + display() ? |
+---------------------+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?+-------------------+
```
在上圖中,Chart接口定義了一個display方法,各個具體圖表類實現(xiàn)了該方法以顯示特定類型的圖表。當(dāng)需要增加一種新類型的圖表時,只需要實現(xiàn)一個新的具體圖表類,不用修改原有代碼。這樣,可以使系統(tǒng)具有更好的擴展性和維護性。