設計模式 命令模式

2021-09-25 23:56:36 字數 3146 閱讀 3752

《head first 設計模式》 學習筆記,碼雲同步更新中

如有錯誤或不足之處,請一定指出,謝謝~

目錄

設計原則

設計模式

命令模式(command pattern)

定義: 結構

分析命令模式的本質是對命令進行封裝,將命令發出和執行的責任分割開

優點:缺點:

使用場景:

案例

/**

* 命令介面

**/public inte***ce command

/**

* 有7組開關的遙控器

**/public class remotecontrol

lastcommand = nocommand;

}/**

* 往遙控器開關上設定命令

*/public void setcommand(int slot, command oncommand, command offcommand)

/*** 開

* @param slot

*/public void pushonbutton(int slot)

/*** 關

* @param slot

*/public void pushoffbutton(int slot)

/*** 撤銷

*/public void pushundobutton()

/*** 重寫tostring方法,給出遙控器說明書

* @return

*/@override

public string tostring()

return stringbuffer.tostring();

}}

家電

/**

* 電燈

**/public class light

public void on()

public void off()

}/**

* 電扇

**/public class electricfan

public void speedhigh()

public void speedmedium()

public void speedlow()

public void turnoff()

public int getspeed()

}/**

* 音響

**/public class stereo

/***/

public void playcd()

/*** 設定音量

*/public void setvolume(int volume)

/*** 關機

*/public void off()

}

具體命令

/**

* 空命令

* * 空物件本身也可以被當做一種設計模式。

* 可以用於當你不想返回乙個有意義的物件時。

* 遙控器在最初不可能設定了有意義的命令物件,

* 使用空物件可以避免沒必要的報錯。

**/public class nocommand implements command

@override

public void undo()

}/**

* 開啟電燈的命令

**/public class lightoffcommand implements command

@override

public void execute()

@override

public void undo()

}// 關閉電燈 略

/** * 電風扇 高風速 命令

**/public class electricfanspeedhighcommand implements command

@override

public void execute()

/*** 撤銷,恢復之前的風速

*/@override

public void undo() else if (prevspeed == electricfan.medium) else if (prevspeed == electricfan.low) else if (prevspeed == electricfan.off)

}}// 其他電扇命令 略

/** * 音響開啟命令

**/public class stereooffwithcdcommand implements command

@override

public void execute()

@override

public void undo()

}// 音響關閉命令 略

/** * 巨集命令

**/public class macrocommand implements command

/*** 一鍵全部執行

*/@override

public void execute()

}@override

public void undo()

}}

測試類

/**

* 遙控器測試

**/public class remotecontroltest ;

command turnoffalllightsarr = ;

macrocommand turnonalllights = new macrocommand(turnonalllightsarr);

macrocommand turnoffalllights = new macrocommand(turnoffalllightsarr);

control.setcommand(4, turnonalllights, turnoffalllights);

control.pushonbutton(4);

control.pushoffbutton(4);

control.pushundobutton();

}}

設計模式 命令設計模式

一句話總結 命令設計模式的實質是將命令定義,命令的執行分離開,從而提公升了系統的解藕性 結構 命令的抽象command 命令的具體實現concretecommand 命令處理者抽象ireceiver 命令處理者的具體實現concretereceiver 命令的呼叫者invoker 客戶端client...

設計模式 命令模式

1 命令模式的角色組成 1 命令角色 command 生命執行操作的介面。介面或抽象類來實現。2 具體命令角色 concrete command 將乙個接收者物件繫結於乙個動作 呼叫接收者相應的操作,以實現命令角色宣告的執行操作的介面。3 客戶角色 client 建立乙個具體命令物件 並可以設定它的...

設計模式 命令模式

1 command.h ifndef command h define command h include include include using namespace std class chef 廚師,具體命令的執行者 class command 命令基類 class makemuttonco...