《Head.First設計模式讀書筆記》之策略模式

策略模式:策略模式針對一組算法(行爲),將每個算法封裝到具備共同接口的獨立的類中,從而使得它們能夠相互替換。策略模式使得算法能夠在不影響到客戶端的狀況下發生變化。策略模式把行爲和環境分開。環境類負責維持和查詢行爲類,各類算法在具體的策略類中提供。因爲算法和環境獨立開來,算法的增減,修改都不會影響到環境和客戶端。
個人理解:
策略模式就是利用多態動態實現一個接口和它的繼承類。這些繼承類就是指的不一樣策略。
 
MM的例子:跟不一樣類型的MM約會,要用不一樣的策略,有的請電影比較好,有的則去吃小吃效果不錯,有的去海邊浪漫最合適,單目的都是爲了獲得MM的芳心,個人追MM錦囊中有好多Strategy哦。
個人理解:
在這裏追 MM 錦囊就至關於一個接口,此接口裏定義了一個方法: appointment() ,如下還有不一樣的女孩類 ( 愛看電影的,喜歡小吃的,喜歡浪漫的等 ) 繼承這個錦囊接口。在實現時只有使用多態就能夠實現動態改變行爲。
再寫個例子來進行鞏固:
顧客去商店買商品,在顧客類中,付款是不變的行爲,所以放在顧客類裏。而對於購物行爲,不一樣的顧客有不一樣的需求,所以把購物行爲提取爲一個封裝類。如下爲uml類圖:
具體的實現請參照附件,如下列出測試類:
public class Test extends TestCase {
       public void testCase1(){
              Student student = new Student();
              // 這裏能夠動態設置購買行爲
              student.setShoppingBehavior(new ShoppingBooks());
              student.display();
              student.getShoppingBehavior().shopping();
              student.payment();
              System.out.println();
             
              SchoolGirl schoolGirl = new SchoolGirl();
              schoolGirl.setShoppingBehavior(new ShoppingEat());
              // 若是女生也是去買書,咱們能夠在這裏動態改變她的購買行爲
              //schoolGirl.setShoppingBehavior(new ShoppingBooks());
              schoolGirl.display();
              schoolGirl.getShoppingBehavior().shopping();
              schoolGirl.payment();
       }
}
在這個測試類中使用了多態去動態改變購買行爲(在這裏購買行爲就是策略,這裏有買書和買吃的兩種策略)。
相關文章
相關標籤/搜索