国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP設(shè)計模式——狀態(tài)模式

Coding01 / 1540人閱讀

摘要:前言狀態(tài)設(shè)計模式是提出的最吸引人的模式之一,也是一種最有用的模式。狀態(tài)模式的作用就是允許對象在狀態(tài)改變時改變其行為。還有很多其他模擬應(yīng)用不一定是游戲也依賴于狀態(tài)模式。相關(guān)資料狀態(tài)模式

前言

狀態(tài)設(shè)計模式是Gof提出的最吸引人的模式之一,也是一種最有用的模式。游戲通常就采用狀態(tài)模式,因為游戲中的對象往往會非常頻繁地改變狀態(tài)。狀態(tài)模式的作用就是允許對象在狀態(tài)改變時改變其行為。還有很多其他模擬應(yīng)用(不一定是游戲)也依賴于狀態(tài)模式。本文將會談到并舉例說明。
按照傳統(tǒng)思維,如果有多個狀態(tài)的話一般就是用if、else if、switch處理了,但是這類的代碼看起來極其不美觀,最重要的是沒什么拓展性,維護性,復(fù)用性,還會出現(xiàn)“牽一發(fā)而動全身”的情況。如果把這些狀態(tài)封裝起來,就可以減少大量的判斷,那么就要用狀態(tài)模式了。

效果圖

需求分析

1、代碼遵循可拓展性強,可維護性強,復(fù)用性強,杜絕”牽一發(fā)而動全身”的情況。
2、減少使用大量的if、else if、switch判斷。

核心代碼

1、Work.php(它定義了時間程序需要的接口并維護一個具體狀態(tài)角色的實例,將與狀態(tài)相關(guān)的操作委托給當(dāng)前的具體對象來處理。)

current = new EarlyMorning();  
    }
    //設(shè)置狀態(tài)  
    public function SetState($s)  
    {
        $this->current = $s;  
    }  
  
    public function WriteCode()  
    { 
       return $this->current->WriteCode($this);  
    }  
}  

2、IState.php(定義一個接口以封裝使用上下文環(huán)境的的一個特定狀態(tài)相關(guān)的行為。)


3、EarlyMorning.php(實現(xiàn)抽象狀態(tài)定義的接口。)

  
//早晨工作狀態(tài)  
class EarlyMorning implements IState  
{ 
    public function WriteCode($w)  
    {  
        if($w->hour<6)  
        {  
           return Yii::t("yii","Good Early morning"); 
        }else{  
            $w->SetState(new GoodMorning());  
           return $w->WriteCode();  //注意:這里必須都要return返回,否則調(diào)用客戶端代碼的時候無法賦值給$call。
        }   
           
    }  
} 

//早上工作狀態(tài)  
class GoodMorning implements IState  
{ 
    public function WriteCode($w)  
    {  
        if($w->hour<9)  
        {  
           return Yii::t("yii","Good morning"); 
        }else{  
            $w->SetState(new GoodForenoon());  
           return $w->WriteCode();  
        }    
    }  
} 

//上午工作狀態(tài)  
class GoodForenoon implements IState  
{ 
    public function WriteCode($w)  
    {   
        if($w->hour<12)  
        { 
           return Yii::t("yii","Good forenoon"); 
        }else{  
            $w->SetState(new GoodNoon());  
           return $w->WriteCode();  
        }    
    }  
} 

//中午工作狀態(tài)  
class GoodNoon implements IState  
{ 
    public function WriteCode($w)  
    { 
        if($w->hour<14)  
        {  
           return Yii::t("yii","Good noon"); 
        }else{  
            $w->SetState(new GoodAfternoon());  
           return $w->WriteCode();  
        }    
    }  
} 

//下午工作狀態(tài)  
class GoodAfternoon implements IState  
{ 
    public function WriteCode($w)  
    {  
        if($w->hour<17)  
        {  
           return Yii::t("yii","Good afternoon"); 
        }else{  
            $w->SetState(new GoodDusk());  
           return $w->WriteCode();  
        }    
    }  
}

//傍晚工作狀態(tài)  
class GoodDusk implements IState  
{ 
    public function WriteCode($w)  
    { 
        if($w->hour<19)  
        {  
           return Yii::t("yii","Good dusk"); 
        }else{  
            $w->SetState(new GoodNight());  
           return $w->WriteCode();  
        }   
    }  
} 

//晚上工作狀態(tài)  
class GoodNight implements IState  
{ 
    public function WriteCode($w)  
    {  
        if($w->hour<22)  
        {  
           return Yii::t("yii","Good night"); 
        }else{  
            $w->SetState(new GoodAtNight());  
           return $w->WriteCode();  
        }   
    }  
} 

//夜里工作狀態(tài)  
class GoodAtNight implements IState  
{ 
    public function WriteCode($w)  
    {  
        return Yii::t("yii","Good at night");  
    }  
}   
調(diào)用客戶端代碼
hour = date("H");  
$call=$emergWork->WriteCode(); 
增加狀態(tài)

1、例如:在原來的應(yīng)用中增加個“半夜的狀態(tài)”。
1.1、在原夜里工作狀態(tài)類增加個if判斷,符合條件時調(diào)用半夜的工作狀態(tài)。

hour<23)  
        {   
            return Yii::t("yii","Good at night");  
        }else{  
            $w->SetState(new Midnight());  
            return  $w->WriteCode();  
        }   
    }  
}

1.2、新增一個半夜工作狀態(tài)類,里面寫要執(zhí)行的行為。


怎么樣,增加一個狀態(tài)是不是很簡單?拓展性非常好。

提醒注意

1、實現(xiàn)狀態(tài)接口類中的$w->WriteCode()必須要return返回,否則調(diào)用客戶端代碼的時候無法賦值給$call,會直接echo輸出。
2、實現(xiàn)狀態(tài)接口類中的public function WriteCode($w)方法里的$w對象類應(yīng)該是Work對象,不能是當(dāng)前類的對象。

總結(jié)分析

1、優(yōu)點
1.1、狀態(tài)模式將與特定狀態(tài)相關(guān)的行為局部化,并且將不同狀態(tài)的行為分割開來。
1.2、所有狀態(tài)相關(guān)的代碼都存在于某個ConcereteState中,所以通過定義新的子類很容易地增加新的狀態(tài)和轉(zhuǎn)換。
1.3、狀態(tài)模式通過把各種狀態(tài)轉(zhuǎn)移邏輯分不到State的子類之間,來減少相互間的依賴。
2、缺點
2.1、導(dǎo)致較多的ConcreteState子類。

相關(guān)資料

狀態(tài)模式

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/30420.html

相關(guān)文章

  • PHP設(shè)計模式之觀察者模式

    摘要:概念觀察者模式屬于行為模式,是定義對象間的一種一對多的依賴關(guān)系,以便當(dāng)一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并自動刷新。觀察者模式符合接口隔離原則,實現(xiàn)了對象之間的松散耦合。 概念 觀察者模式屬于行為模式,是定義對象間的一種一對多的依賴關(guān)系,以便當(dāng)一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并自動刷新。 當(dāng)一個對象狀態(tài)發(fā)生改變后,會影響到其他幾個對象的改變,這...

    phpmatt 評論0 收藏0
  • PHP設(shè)計模式——觀察者模式

    摘要:設(shè)計觀察者模式是為了讓一個對象跟蹤某個狀態(tài),知道狀態(tài)何時改變,一旦狀態(tài)改變,所有訂閱對象都能得到通知。類與觀察者設(shè)計模式?jīng)]有內(nèi)在的關(guān)系,不過通過它其內(nèi)置的和方法可以很方便的將觀察者實例與一個主題實例相關(guān)聯(lián)以及解除關(guān)聯(lián)。 前言 知識就是作為觀察者所獲得的結(jié)論,經(jīng)過科學(xué)培訓(xùn)的觀察者會為我們提供所有能感知的現(xiàn)實。設(shè)計觀察者模式是為了讓一個對象跟蹤某個狀態(tài),知道狀態(tài)何時改變,一旦狀態(tài)改變,所有...

    Barrior 評論0 收藏0
  • PHP設(shè)計模式——觀察者模式

    摘要:設(shè)計觀察者模式是為了讓一個對象跟蹤某個狀態(tài),知道狀態(tài)何時改變,一旦狀態(tài)改變,所有訂閱對象都能得到通知。類與觀察者設(shè)計模式?jīng)]有內(nèi)在的關(guān)系,不過通過它其內(nèi)置的和方法可以很方便的將觀察者實例與一個主題實例相關(guān)聯(lián)以及解除關(guān)聯(lián)。 前言 知識就是作為觀察者所獲得的結(jié)論,經(jīng)過科學(xué)培訓(xùn)的觀察者會為我們提供所有能感知的現(xiàn)實。設(shè)計觀察者模式是為了讓一個對象跟蹤某個狀態(tài),知道狀態(tài)何時改變,一旦狀態(tài)改變,所有...

    KoreyLee 評論0 收藏0
  • PHP設(shè)計模式——觀察者模式

    摘要:設(shè)計觀察者模式是為了讓一個對象跟蹤某個狀態(tài),知道狀態(tài)何時改變,一旦狀態(tài)改變,所有訂閱對象都能得到通知。類與觀察者設(shè)計模式?jīng)]有內(nèi)在的關(guān)系,不過通過它其內(nèi)置的和方法可以很方便的將觀察者實例與一個主題實例相關(guān)聯(lián)以及解除關(guān)聯(lián)。 前言 知識就是作為觀察者所獲得的結(jié)論,經(jīng)過科學(xué)培訓(xùn)的觀察者會為我們提供所有能感知的現(xiàn)實。設(shè)計觀察者模式是為了讓一個對象跟蹤某個狀態(tài),知道狀態(tài)何時改變,一旦狀態(tài)改變,所有...

    lifefriend_007 評論0 收藏0
  • PHP基礎(chǔ)

    摘要:分別為適配器模式,裝飾器模式,代理模式,外觀模式,橋接模式,組合模式,享元模式。設(shè)計模式五適配器模式適配器模式將某個對象的接生成器和協(xié)程的實現(xiàn)在這篇文章中,作者針對那些比較難以理解的概念,以一個更為通俗的方式去講明白。。 PHP 源碼注解 PHP 的詳細源碼注解 PHP 字符串操作整理 一些有關(guān)字符串的常用操作。 Redis 常見七種使用場景 (PHP 實戰(zhàn)) 這篇文章主要介紹利用 R...

    HtmlCssJs 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<