- extracted implementation details(SRP)
- created opportunity for easy change and easy extension
- reduced duplication(DRY)
- Linux Virtual File System?
Example 1
底下的例子中,SortingContext 為 client 端(在此為 main)的 interface,client 可使用不同的 SortingStrategy ,SortingStrategy 是可抽換的,其子類別為不同的 sorting algorithm,將子類別當作參數傳入 SortingContext 裡的 member function 是安全的,因為子類別 pointer 轉成其 parent 類別的 pointer 是安全的。
要注意這邊不能使用 this->sortingStrategy.reset(strategy.get())
,會造成 double free,因為上一個 strategy 因為本身就是 unique pointer,因此已經自動被 free 了。
Example 2