ava設計模式之——策略模式
1,什麼是策略模式?
策略模式,又叫演算法簇模式,就是定義了不同的演算法族,並且之間可以互相替換,此模式讓演算法的變化獨立於使用演算法的客戶。
2,策略模式有什麼好處?
策略模式的好處在於你可以動態改變對象的行為。
3,設計原則
設計原則是把一個類中經常改變或者將來可能改變的部分提取出來,作為一個介面(c++z中可以用虛類),然後在類中包含這個對象的執行個體,這樣類的執行個體在運行時就可以隨意調用實現了這個介面的類的行為。下面是一個例子。
策略模式屬於對象行為型模式,主要針對一組演算法,將每一個演算法封裝到具有共同介面的獨立的類中,從而使得它們可以相互替換。策略模式使得演算法可以在不影響到用戶端的情況下發生變化。通常,策略模式適用於當一個應用程式需要實現一種特定的服務或者功能,而且該程式有多種實現方式時使用。
4 ,策略模式中有三個對象:
(1) 環境對象:該類中實現了對抽象策略中定義的介面或者抽象類別的引用。
(2) 抽象策略對象:它可由介面或抽象類別來實現。
(3) 具體策略對象:它封裝了實現同不功能的不同演算法。
利用策略模式構建應用程式,可以根據使用者配置等內容,選擇不同有演算法來實現應用程式的功能。具體的選擇有環境對象來完成。採用這種方式可以避免由於使用條件陳述式而帶來的代碼混亂,提高應用程式的靈活性與條理性。
5,應用情境舉例:
劉備要到江東娶老婆了,走之前諸葛亮給趙雲(伴郎)三個錦囊妙計,說是按天機拆開能解決棘手問題,嘿,還別說,真解決了大問題,搞到最後是周瑜陪了夫人又折兵,那咱們先看看這個情境是什麼樣子的。
抽象策略對象:
public interface IStrategy {public void operate();}
環境對象:
public class Strategy {private IStrategy strategy;public Strategy(IStrategy strategy) {this.strategy = strategy;}public void operate(){this.strategy.operate();}}
具體策略對象:
public class BackDoor implements IStrategy {@Overridepublic void operate() {System.out.println("喬國老開後門");}}
public class GivenGreenLight implements IStrategy {@Overridepublic void operate() {System.out.println("吳國太放綠燈...");}}
public class BlockArem implements IStrategy{@Overridepublic void operate() {System.out.println("孫夫人斷後...");}}
6,具體的實現,本案例是基於android實現的,在java中單獨寫一個Test類在main方法中實現。
Strategy stategy;stategy = new Strategy(new BackDoor());stategy.operate();stategy = new Strategy(new GivenGreenLight());stategy.operate();stategy = new Strategy(new BlockArem());stategy.operate();
看運行效果