天天看點

《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();

       }

}

在這個測試類中使用了多态去動态改變購買行為(在這裡購買行為就是政策,這裡有買書和買吃的兩種政策)。

<a href="http://down.51cto.com/data/2353759" target="_blank">附件:http://down.51cto.com/data/2353759</a>

本文轉自 yzzh9 51CTO部落格,原文連結:http://blog.51cto.com/java999/194116,如需轉載請自行聯系原作者

繼續閱讀