軟件設(shè)計師案例分析當(dāng)天每日一練試題地址:m.xiexiliangjiufa.com/exam/ExamDayAL.aspx?t1=4
往期軟件設(shè)計師每日一練試題匯總:m.xiexiliangjiufa.com/class/27/e4_1.html
軟件設(shè)計師案例分析每日一練試題(2024/4/29)在線測試:m.xiexiliangjiufa.com/exam/ExamDayAL.aspx?t1=4&day=2024/4/29
點(diǎn)擊查看:更多軟件設(shè)計師習(xí)題與指導(dǎo)
軟件設(shè)計師案例分析每日一練試題內(nèi)容(2024/4/29)
試題七
閱讀以下說明以及Java程序。
【說明】
傳輸門是傳輸系統(tǒng)中的重要裝置。傳輸門具有Open(打開)、Closed(關(guān)閉)、Opening (正在打開)、StayOpen(保持打開)和Closing(正在關(guān)閉)五種狀態(tài)。觸發(fā)狀態(tài)的轉(zhuǎn)換事件有click、complete和timeout三種。事件與其相應(yīng)的狀態(tài)轉(zhuǎn)換如下圖所示。
下面的Java代碼1與Java代碼2分別用兩種不同的設(shè)計思路對傳輸門進(jìn)行狀態(tài)模擬,請?zhí)钛a(bǔ)代碼中的空缺。
【Java代碼1】
public class Door {
public static final int CLOSED = 1; public static final int OPENING = 2;
public static final int OPEN = 3; public static final int CLOSING = 4;
public static final int STAYOPEN = 5; private int state = CLOSED;
//定義狀態(tài)變量,用不同的整數(shù)表示不同狀態(tài)
private void setState(int state){ this.state = state;}
//設(shè)置傳輸門當(dāng)前狀態(tài)
public void getState() {
//此處代碼省略,本方法輸出狀態(tài)字符串,
//例如,當(dāng)前狀態(tài)為CLOSED時,輸出字符串為"CLOSED"
}
public void click() { //發(fā)生click事件時進(jìn)行狀態(tài)轉(zhuǎn)換
if ( (1) ;) setState(OPENING.;
else if ( (2) ;) setState{CLOSING.;
else if ( (3) ;) setState(STAYOPEN);
}
//發(fā)生timeout事件時進(jìn)行狀態(tài)轉(zhuǎn)換
public void timeout() { if (state == OPEN) setState(CLOSING.;}
public void complete() {//發(fā)生complete事件時進(jìn)行狀態(tài)轉(zhuǎn)換
if (state == OPENING. setState(OPEN);
else if (state == CLOSING. setState(CLOSED.;
}
public static void main(String [] args){
Door aDoor = new Door();
aDoor.getState();aDoor.click();aDoor.getState();aDoor.complete();
aDoor.getState();aDoor.click();aDoor.getState();aDoor.click();
aDoor.getState();return;
}
}
【Java代碼2】
public class Door {
public final DoorState CLOSED = new DoorClosed(this);
public final DoorState OPENING = new DoorOpening(this);
public final DoorState OPEN = new DoorOpen(this);
public final DoorState CLOSING = new DoorClosing(this);
public final DoorState STAYOPEN = new DoorStayOpen(this);
private DoorState state = CLOSED;
//設(shè)置傳輸門當(dāng)前狀態(tài)
public void setState(DoorState state) { this.state=state;}
public void getState(){ //根據(jù)當(dāng)前狀態(tài)輸出對應(yīng)的狀態(tài)字符串
System.out.println(state.getClass().getName());
}
public void click(){ (4) ;}//發(fā)生click事件時進(jìn)行狀態(tài)轉(zhuǎn)換
public void timeout(){ (5) ;}//發(fā)生timeout事件時進(jìn)行狀態(tài)轉(zhuǎn)換
public void complete(){ (6) ;)//發(fā)生complete事件時進(jìn)行狀態(tài)轉(zhuǎn)換
public static void main(String[]args){
Door aDoor = new Door();
aDoor.getState();aDoor.click();aDoor.getState();aDoor.complete();
aDoor.getState();aDoor.timeout();aDoor.getState();return;
}
}
public abstract class DoorState { //定義所有狀態(tài)類的基類
protected Door door ;
public DoorState(Door doer) { this.door = door;}
public void click() {}
public void complete() {}
public void timeout() {}
}
class DoorClosed extends DoorState { //定義一個基本的Closed狀態(tài)
public DoorClosed(Door door) { super(door);}
public void click() { (7) ;)
//該類定義的其余代碼省略
}
//其余代碼省略
信管網(wǎng)考友試題答案分享:
信管網(wǎng)cnitpm475547856609:
getstate()==“opening”<br>getstate()==“closing”<br>getstate()==“stayopen”<br>
信管網(wǎng)cnitpm505321579599:
1 state==closing || state==xlosed<br>2 state==stay open || state==opening<br>3 state==open<br>4 state.click()<br>5 state.tineout()<br>6 state.complete()<br>7 <br>
信管網(wǎng)訂閱號
信管網(wǎng)視頻號
信管網(wǎng)抖音號
溫馨提示:因考試政策、內(nèi)容不斷變化與調(diào)整,信管網(wǎng)網(wǎng)站提供的以上信息僅供參考,如有異議,請以權(quán)威部門公布的內(nèi)容為準(zhǔn)!
信管網(wǎng)致力于為廣大信管從業(yè)人員、愛好者、大學(xué)生提供專業(yè)、高質(zhì)量的課程和服務(wù),解決其考試證書、技能提升和就業(yè)的需求。
信管網(wǎng)軟考課程由信管網(wǎng)依托10年專業(yè)軟考教研傾力打造,教材和資料參編作者和資深講師坐鎮(zhèn),通過深研歷年考試出題規(guī)律與考試大綱,深挖核心知識與高頻考點(diǎn),為學(xué)員考試保駕護(hù)航。面授、直播&錄播,多種班型靈活學(xué)習(xí),滿足不同學(xué)員考證需求,降低課程學(xué)習(xí)難度,使學(xué)習(xí)效果事半功倍。
發(fā)表評論 查看完整評論 | |