Java 策略模式和狀態模式


先上圖:

本質上講,策略模式和狀態模式做得是同一件事:去耦合。怎么去耦合?就是把干什么(語境類)和怎么干(策略接口)分開,互不依賴。打個比方,下面是我一天的行程:

class 我{
    吃飯(){}
    逛街(){}
    啪啪啪(){}
    睡覺(){}
}

但問題來了,啪啪啪是個技術活,有著名的48式,今天到底要用哪一式呢?於是我的代碼變成了這樣:

class 我{
    吃飯(){}
    逛街(){}
    啪啪啪1式(){}
    啪啪啪2式(){}
    啪啪啪3式(){}
    睡覺(){}
}

但代碼如果是這樣的,寶寶肯會被老板開掉的。但寶寶發現,啪啪啪的方式其實取決於我的妹子。對三種不同類型的妹子,我的表現是不同的。

class 鬼妹 implements 妹子{
    愛愛(){print(”Come on!“);}
}

class 乖妹 implements 妹子{
    愛愛(){print("I love you!");}
}

class 萌妹 implements 妹子{
    愛愛(){print("Ya Mie Die!");}
}

interface 妹子 {
    愛愛();
}

而且我驚訝地發現,所有妹子都把啪啪啪叫做”愛愛“。所以只要我只要知道今天晚上是和哪個妹子在一起,根據多態性,我只要說同一句話:”妹子讓我們愛愛吧“。接下來發生的事,我只要閉上眼睛享受就好了。

class 我{
    吃飯();
    逛街();
    啪啪啪(妹子 今晚的妹子){
        今晚的妹子.愛愛();
    }
    睡覺();
}

於是,你懂的:

main(){
    我 胖胖 = new 我();
    print("周一:");
    妹子 娘子 = new 乖妹();
    胖胖.啪啪啪(娘子);
    print("周二:");
    妹子 小三 = new 萌妹();
    胖胖.啪啪啪(小三);
}

//OutPut:
周一:I love you!
周二:Ya Mie Die!

以上的就叫:策略模式!

但后來我發現,其實我做的每一件事都取決我的妹子,我徹底震驚了!我的生活不能沒有妹子!

class 我{
    吃飯(妹子 今晚的妹子){
        今晚的妹子.飯飯();
    }
    逛街(妹子 今晚的妹子){
        今晚的妹子.逛逛();
    }
    啪啪啪(妹子 今晚的妹子){
        今晚的妹子.愛愛();
    }
    睡覺(妹子 今晚的妹子){
        今晚的妹子.呼呼();
    }
}

於是終於說出了那句話:嫁給我吧!於是,她徹底走進了我的生活!

class 我{
    吃飯(){
        老婆.飯飯();
    }
    逛街(){
        老婆.逛逛();
    }
    啪啪啪(){
        老婆.愛愛();
    }
    睡覺(){
        老婆.呼呼();
    }
    
    //fields
    妹子 老婆 = new 乖妹子();
}

但你們是懂我的,我的小三怎么辦呢?要是每天都能切換情人就最好了!

class 我{

    切換情人(妹子 情人){
        老婆 = 情人;
    }   

    吃飯(){
        老婆.飯飯();
    }
    逛街(){
        老婆.逛逛();
    }
    啪啪啪(){
        老婆.愛愛();
    }
    睡覺(){
        老婆.呼呼();
    }
    
    //fields
    妹子 老婆 = new 乖妹子();
}

於是每一天都充滿了新鮮感呢!

main(){
    我 胖胖 = new 我();
    print("周一:");
    //老婆
    胖胖.啪啪啪();
    print("周二:");
    妹子 小三 = new 萌妹();
    胖胖.切換情人(小三);
    //小三
    胖胖.啪啪啪();
}

//OutPut:
周一:I love you!
周二:Ya Mie Die!

於是,我都愛上了這種叫”狀態模式“的生活方式。

所以,”策略模式“就好比單身的時候,沒有固定情人,每天用微信出去約泡。”狀態模式“就是結婚以后,有了固定的情人,生活可以在老婆和小三之間游刃有余!

說到這里,大家一定都豁然開朗了吧!那么,祝大家生活幸福!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM