【Head First設(shè)計(jì)模式】-Strategy模式
Posted on 2008-01-10 10:33 詩(shī)特林 閱讀(2851) 評(píng)論(2) 編輯 收藏 所屬分類(lèi): DesignPattern【Head First設(shè)計(jì)模式】-Strategy模式
一、從訂餐開(kāi)始
小王和小劉兩人到餐廳點(diǎn)餐,兩人分別如下告訴廚師。
小王:我要一杯加了香草冰淇淋的巧克力汽水。
小劉:一個(gè)黑與白。
這兩人點(diǎn)的餐有什么不同呢?其實(shí)是一樣的,都是同一份。只是小劉用專(zhuān)業(yè)的名字說(shuō)來(lái)出,廚師一聽(tīng)就明白。但小王沒(méi)有,他不懂,因此他與廚師之間沒(méi)有“共享的詞匯”。共享的詞匯不僅方便顧客點(diǎn)餐,也讓廚師不用記太多的事。
設(shè)計(jì)模式就是讓我們與其它的開(kāi)發(fā)人員之間的共享詞匯,一旦懂得這些共享詞匯,和其它開(kāi)發(fā)人員之間的溝通就容易很多。也讓那些不懂設(shè)計(jì)模式的程序開(kāi)始學(xué)習(xí)模式。設(shè)計(jì)模式可以把思考架構(gòu)的層次提高到模式層面,而不僅僅停留在瑣碎的對(duì)象上。
二、Strategy模式
1、兩大原則
設(shè)計(jì)模式真正體現(xiàn)的是Java的原則,而這些原則又通過(guò)這些優(yōu)秀的模式反映出來(lái)。有些面向?qū)ο蟮脑瓌t,適用于所有的模式,當(dāng)無(wú)法找到適當(dāng)?shù)哪J浇鉀Q問(wèn)題時(shí),這些原則就是唯一的標(biāo)準(zhǔn)了。Strategy模式體現(xiàn)了如下的兩大原則:
l 針對(duì)接口編程,而不是針對(duì)實(shí)現(xiàn)編程。
l 多用組合,少用繼承。
2.傳統(tǒng)設(shè)計(jì) 3.strategy設(shè)計(jì) 三、代碼實(shí)現(xiàn) 1.抽象類(lèi)Duck.java 2.行為封裝類(lèi) (1)接口 接口FlyBehavior.java 接口FlyBehavior.java
package com.sterning.ch1_strategy;
import com.sterning.ch1_strategy.behavior.FlyBehavior;
import com.sterning.ch1_strategy.behavior.QuackBehavior;
public abstract class Duck
{
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
public void setFlyBehavior(FlyBehavior flyBehavior)
{
this.flyBehavior = flyBehavior;
}
public void setQuackBehavior(QuackBehavior quackBehavior)
{
this.quackBehavior = quackBehavior;
}
public Duck()
{
}
public abstract void display();
public void performFly()
{
flyBehavior.fly();
}
public void performQuack()
{
quackBehavior.quack();
}
public void swim()
{
System.out.println("All ducks float,even decoys!");
}
}
package com.sterning.ch1_strategy.behavior;
public interface FlyBehavior {
public void fly();
}
package com.sterning.ch1_strategy.behavior;
public interface QuackBehavior {
public void quack();
}
(2)實(shí)現(xiàn)
FlyNoWay.java












FlyRocketPowered.java












FlyWithWings.java












MuteQuack.java












Quack.java













Squeak.java












3.實(shí)現(xiàn)類(lèi)
MallardDuck.java



















ModelDuck.java




















4.測(cè)試類(lèi)
MiniDuckSimulator.java























源代碼下載:DesignPattern_ch1_strategy.rar