23状态模式
1狀態(tài)模式的核心內(nèi)容是:
A:狀態(tài)類
B:工作類
2狀態(tài)模式的作用:通過(guò)狀態(tài)值自動(dòng)跳轉(zhuǎn)到要執(zhí)行的類。
3狀態(tài)模式具體描述
狀態(tài)模式:狀態(tài)模式允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變的時(shí)候改變行為。
這個(gè)對(duì)象看上去象是改變了它的類一樣。狀態(tài)模式把所研究的對(duì)象的行
為包裝在不同的狀態(tài)對(duì)象里,每一個(gè)狀態(tài)對(duì)象都屬于一個(gè)抽象狀態(tài)類的
一個(gè)子類。狀態(tài)模式的意圖是讓一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變的時(shí)候,
其行為也隨之改變。狀態(tài)模式需要對(duì)每一個(gè)系統(tǒng)可能取得的狀態(tài)創(chuàng)立一個(gè)狀態(tài)類的
子類。當(dāng)系統(tǒng)的狀態(tài)變化時(shí),系統(tǒng)便改變所選的子類。
?
跟MM交往時(shí),一定要注意她的狀態(tài)哦,在不同的狀態(tài)時(shí)她的行為會(huì)有不同,
比如你約她今天晚上去看電影,對(duì)你沒(méi)興趣的MM就會(huì)說(shuō)“有事情啦”
,對(duì)你不討厭但還沒(méi)喜歡上的MM就會(huì)說(shuō)“好啊,不過(guò)可以帶上我同事么?”
,已經(jīng)喜歡上你的MM就會(huì)說(shuō)“幾點(diǎn)鐘?看完電影再去泡吧怎么樣?”,
當(dāng)然你看電影過(guò)程中表現(xiàn)良好的話,也可以把MM的狀態(tài)從不討厭不喜歡變成喜歡哦。
4狀態(tài)模式類圖
5.代碼:
#include<iostream>
#include<string>
usingnamespacestd;
//狀態(tài)模式:狀態(tài)模式允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變的時(shí)候改變行為。
//這個(gè)對(duì)象看上去象是改變了它的類一樣。狀態(tài)模式把所研究的對(duì)象的行
//為包裝在不同的狀態(tài)對(duì)象里,每一個(gè)狀態(tài)對(duì)象都屬于一個(gè)抽象狀態(tài)類的
//一個(gè)子類。狀態(tài)模式的意圖是讓一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變的時(shí)候,
//其行為也隨之改變。狀態(tài)模式需要對(duì)每一個(gè)系統(tǒng)可能取得的狀態(tài)創(chuàng)立一個(gè)狀態(tài)類的
//子類。當(dāng)系統(tǒng)的狀態(tài)變化時(shí),系統(tǒng)便改變所選的子類。
//
//跟MM交往時(shí),一定要注意她的狀態(tài)哦,在不同的狀態(tài)時(shí)她的行為會(huì)有不同,
//比如你約她今天晚上去看電影,對(duì)你沒(méi)興趣的MM就會(huì)說(shuō)“有事情啦”
//,對(duì)你不討厭但還沒(méi)喜歡上的MM就會(huì)說(shuō)“好啊,不過(guò)可以帶上我同事么?”
//,已經(jīng)喜歡上你的MM就會(huì)說(shuō)“幾點(diǎn)鐘?看完電影再去泡吧怎么樣?”,
//當(dāng)然你看電影過(guò)程中表現(xiàn)良好的話,也可以把MM的狀態(tài)從不討厭不喜歡變成喜歡哦。
classWork;
classState;
classForenonnState;
?
classState
{
public:
???//準(zhǔn)柜臺(tái)的基類,抽象類
???virtualvoidwriteProgram(Work *) = 0;
};
?
//實(shí)施工作的類,根據(jù)狀態(tài)執(zhí)行不同的操作
classWork
{
public:
???inthour;
???State *current;
???Work();
?
???voidwriteProgram()
???{
???????current->writeProgram(this);
???}
};
?
//晚上狀態(tài)
classEveningState :publicState
{
public:
???voidwriteProgram(Work *w)
???{
???????cout <<"當(dāng)前時(shí)間: " << w->hour << "心情很好,在看《明朝那些事兒》,收獲很大!" << endl;
???}
};
?
//下午的狀態(tài)
classAfternoonState :publicState
{
public:
???voidwriteProgram(Work *w)
???{
???????if (w->hour < 19)
???????{
???????????cout <<"當(dāng)前時(shí)間:" << w->hour << "下午午睡后,工作還是精神百倍!" << endl;
???????}
???????else
???????{
???????????w->current = newEveningState();
???????????w->writeProgram();
???????}
???}
};
?
//上午的狀態(tài)
classForenoonState :publicState
{
public:
???voidwriteProgram(Work *w)
???{
???????if (w->hour < 12)
???????{
???????????cout <<"當(dāng)前時(shí)間:" << w->hour << "上午工作精神百倍!" << endl;
???????}
???????else
???????{
???????????w->current = newAfternoonState();
???????????w->writeProgram();
???????}
???}
};
?
Work::Work()
{
???current =newForenoonState();
}
?
intmain()
{
???Work *w =newWork();
???w->hour = 21;
???//通過(guò)狀態(tài)模式自動(dòng)跳轉(zhuǎn)到要執(zhí)行的類
???w->writeProgram();
???cin.get();
???return 0;
}
運(yùn)行結(jié)果如下:
總結(jié)
 
                            
                        - 上一篇: 坦克的演变?
- 下一篇: 党的地方各级委员会全体会议选举常务委员会
