您好,登錄后才能下訂單哦!
在C++中設(shè)計(jì)一個(gè)控件狀態(tài)機(jī),我們可以使用類和繼承來實(shí)現(xiàn)
#include<iostream>
#include<string>
// 基類 ControlState
class ControlState {
public:
virtual void handle(Control& control) = 0;
};
// 具體狀態(tài)類:ActiveState
class ActiveState : public ControlState {
public:
void handle(Control& control) override {
std::cout << "Control is already active."<< std::endl;
}
};
// 具體狀態(tài)類:InactiveState
class InactiveState : public ControlState {
public:
void handle(Control& control) override {
std::cout << "Activating control..."<< std::endl;
control.set_state(new ActiveState());
}
};
// Control 類
class Control {
public:
Control() : state_(new InactiveState()) {}
void set_state(ControlState* state) {
delete state_;
state_ = state;
}
void handle() {
state_->handle(*this);
}
private:
ControlState* state_;
};
int main() {
Control control;
control.handle(); // 輸出:Activating control...
control.handle(); // 輸出:Control is already active.
return 0;
}
在這個(gè)例子中,我們定義了一個(gè)基類ControlState
,它有一個(gè)純虛函數(shù)handle()
。然后我們創(chuàng)建了兩個(gè)具體狀態(tài)類ActiveState
和InactiveState
,它們分別繼承自ControlState
并實(shí)現(xiàn)handle()
方法。
Control
類包含一個(gè)ControlState
指針,用于存儲(chǔ)當(dāng)前狀態(tài)。我們還為Control
類提供了一個(gè)set_state()
方法,用于設(shè)置新的狀態(tài)。Control
類的handle()
方法調(diào)用當(dāng)前狀態(tài)的handle()
方法。
在main()
函數(shù)中,我們創(chuàng)建了一個(gè)Control
對(duì)象,并連續(xù)調(diào)用了兩次handle()
方法。第一次調(diào)用時(shí),控件處于非活動(dòng)狀態(tài),因此會(huì)激活它并輸出“Activating control…”。第二次調(diào)用時(shí),控件已經(jīng)處于活動(dòng)狀態(tài),因此不會(huì)有任何操作,只會(huì)輸出“Control is already active.”。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。