設(shè)計模式之策略模式總結(jié)

定義

策略模式定義了算法族,分別封裝起來,讓它們之間可以相互替換,此模式讓算法的變化獨立于使用算法的客戶。

實際例子

在Head First 設(shè)計模式的開篇就講了一個策略模式的例子。

要實現(xiàn)一組鴨子類,每種鴨子類可能有不同的叫聲、外形和飛行方式。

將鴨子作為一個抽象父類,同時定義叫聲接口,外形接口,飛行接口。并對每一種叫聲、外形、飛行方式都有一個具體的實現(xiàn)類(實現(xiàn)對應(yīng)接口)。而在鴨子類中持有叫聲、外形和飛行方式三個接口類型的成員變量。

對于具體的一種鴨子,在構(gòu)造方法里使用不同的行為實現(xiàn)類對叫聲、外形和飛行方式進行初始化。
具體代碼:(在三個行為中只包括叫聲接口)

//鴨子父類
public abstract class Duck {
    private FlyBehavior flyBehavior;

    public void performFly() {
        flyBehavior.fly();
    }

    public void setFlyBehavior(FlyBehavior flyBehavior) {
        this.flyBehavior = flyBehavior;
    }

    public FlyBehavior getFlyBehavior() {
        return flyBehavior;
    }
}

//飛行接口
public interface FlyBehavior {
    void fly();
}

//飛行實現(xiàn)類
public class FlyWithWing implements FlyBehavior {
    @Override
    public void fly() {
        System.out.println("fly with wing!");
    }
}

//具體鴨子類
public class BigDuck extends Duck {
    public BigDuck() {
        setFlyBehavior(new FlyWithWing());
    }

    public static void main(String[] args) {
        Duck duck = new BigDuck();
        duck.performFly();
    }
}

設(shè)計模式原則總結(jié)1

  • 封裝變化
  • 多用組合,少用繼承
  • 針對接口而不是實現(xiàn)編程
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 什么是策略模式? ??策略模式作為一種軟件設(shè)計模式,指對象有某個行為,但是在不同的場景中,該行為有不同的實現(xiàn)算法。...
    紙中圓閱讀 1,969評論 0 1
  • 一直想把常見的設(shè)計模式系統(tǒng)地學習一遍,結(jié)果和大多數(shù)人一樣,過了幾天就沒能堅持下去了。我發(fā)現(xiàn)學習這件事情急不得,往往...
    Neulana閱讀 626評論 5 2
  • 策略模式的定義 策略模式(Strategy Pattern):定義一系列算法,將每一個算法封裝起來,并讓它們可以相...
    戴先森Davi閱讀 1,122評論 0 2
  • 二十三種設(shè)計模式 - 策略模式 策略模式簡介 模式動機 完成一項任務(wù),往往可以有多種不同的方式,每一種方式稱為一個...
    JustTheSame閱讀 1,906評論 2 16
  • 1. “牛津樹”沒聽,聽了廖彩杏的“the wheels on the bus”“five little monk...
    Yolanda_Hu閱讀 165評論 0 0

友情鏈接更多精彩內(nèi)容