解決方案二:
上面這個設計違反了兩個設計原則:依賴倒置原則(DIP)和開放封閉原則(OCP),DIP原則告訴我們要優先依賴于抽象類,而Switch依賴了具體類Light,對OCP的違反是在任何需要Switch的地方都要帶上Light,這樣就不能容易擴展Switch去管理除Light外的其他對象。為了解決這個方案,可以采用ABSTRACT SERVER模式,在Switch和Light之間引入一個接口,這樣就使得Switch能夠控制任何實現了這個接口的東西,這也就滿足了DIP和OCP原則。如下面圖2所示:
解決方案三:
上面圖2所示解決方案,違返了單一職責原則(SRP),它把Switch和Light綁定在一起,而它們可能會因為不同的原因而改變。這種問題可以采用ADAPTER模式來解決,適配器從Switchable 派生并委托給Light,問題就被優美的解決了,現在,Switch就可以控制任何能夠被打開或者關閉的對象。但是這也需要會出時間和空間上的代價來換取。如下面圖3所示:
敏捷設計是一個過程,不是一個事件。它是一個持續的應用原則、模式以及實踐來改進軟件的結構和可讀性的過程。它致力于保持系統設計在任何時間都盡可能得簡單、干凈和富有表現力。
文章來源于領測軟件測試網 http://www.kjueaiud.com/