政策模式:政策模式針對一組算法(行為),将每一個算法封裝到具有共同接口的獨立的類中,進而使得它們可以互相替換。政策模式使得算法可以在不影響到用戶端的情況下發生變化。政策模式把行為和環境分開。環境類負責維持和查詢行為類,各種算法在具體的政策類中提供。由于算法和環境獨立開來,算法的增減,修改都不會影響到環境和用戶端。
我的了解:
政策模式就是利用多态動态實作一個接口和它的繼承類。這些繼承類就是指的不同政策。
追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,如需轉載請自行聯系原作者