簡體中文 | 繁體中文

大話設計模式-----第178章


刀御九天 公主的男寵 快穿之女配花樣作死秀 總裁,言而無信的不是我 總裁的限制級寵妻 萌寶甜妻:總裁的私人誘寵 誰讓誰失去了誰 都市異能王 錦繡書 盤龍混沌變 蘭陵七劍 農女的錦繡良園 壞壞王爺靠邊站 網遊乾坤無極 末世之進化系統 果實帝國 陰陽引渡人 聖鬥士之孤獨的水晶 天眼神算 資本大
第178章

小A:“策略模式應該怎麼去應用它?”

大B:“1、如果在一個系統裡面有許多類,它們之間的區別僅在於它們的行為,那麼使用策略模式可以動態的讓一個物件在許多行為中選擇一種行為。2、如果系統需要動態地在幾種演算法中選擇一種。那麼這些演算法可以包裝到一個個的具體演算法類裡面,而這些演算法類都是一個抽象演算法類的子類。3、一個系統的演算法使用的資料不可以讓客戶端知道。策略模式可以避免讓客戶端涉及到不必要接觸到的復發的和只與演算法有關的資料。”

使用案例:

AWT中的LayoutManager,Swing中的Border.

程式碼例子

1、抽象策略

package.eekq.strategy;

publicinterfaceIStrategy{

/**策略方法*/

publicabstractdoubleadd();

}

2、具體策略,這裡我以兩個具體策略為例

package.eekq.strategy;

publicclassConcreteStrategy1implementsIStrategy{

/**示意性演算法*/

publicdoubleadd(){

//TODO自動生成方法存根

System.out.println(this.getClass().getName()+“的加法運算”);

return0;

}

}

package.eekq.strategy;

publicclassConcreteStrategy2implementsIStrategy{

publicdoubleadd(){

//TODO自動生成方法存根

System.out.println(this.getClass().getName()+“的加法運算”);

return0;

}

}

3、環境角色

package.eekq.strategy;

publicclassContext{

/**環境角色類*/

privateIStrategystrategy;

publicContext(IStrategystrategy){

this.strategy=strategy;

}

/**策略方法*/

publicdoubleadd(){

this.strategy.add();

return0;

}

}

4、客戶端呼叫

package.eekq.strategy;

publicclassMain{

/**

*@paramargs

*/

publicstaticvoidmain(String[]args){

//TODO自動生成方法存根

Contextcontext=newContext(newConcreteStrategy1());

context.add();//執行演算法。

context=newContext(newConcreteStrategy2());

context.add();//執行演算法。

}

}

5、執行結果:

.eekq.strategy.ConcreteStrategy1的加法運算

.eekq.strategy.ConcreteStrategy2的加法運算

推薦小說