命令设计模式的应用
嗨,您好!
今天,我將與您分享一種非常出色的編程設計模式。 它有很多用法,是我的最愛之一。 編程設計模式命令具有多種用例。 在這篇文章中,我們將看到如何實現現實世界中的某些東西。
我們將使用電子汽車鑰匙來打開,關閉門,啟用,禁用警報,打開,關閉車庫門或打開和關閉汽車的引擎蓋和行李箱。
我將向您展示的示例是一個非常普通的示例,因此您隨時可以回到這里,并在您的應用程序中使用它。
UML命令模式
如您所知,我總是通過在UML圖上顯示類圖來啟動項目。 這有助于我們以一種精巧,緊湊的方式修復該示例的概述。
解釋細節編程設計
我們的客戶是法拉利車主(FerrariCleint)。 它有一個CarKey。 CarKey具有可通過命令配置的通用MicroShip(Involker)。 命令(OpenDoorCommand)本身具有要執行的動作(DoorAction)。 CarKey可以配置do和undo命令。 NullObjectCommand屬于Null對象設計模式,并且還將在此處使用。 現在讓我們在代碼中查看實現細節。
指揮與微艦
NullObjectCommand在這里用于避免空指針異常,并且只要未定義任何命令就什么都不執行。
public interface Command {void execute(); } public class MicroChip {protected Command[] onCommands;protected Command[] offCommands;public MicroChip(int commandQuantity) {onCommands = new Command[commandQuantity];offCommands = new Command[commandQuantity];Command nullObjecCommand = new NullObjectCommand();for (int i = 0; i < commandQuantity; i++) {onCommands[i]=nullObjecCommand;offCommands[i]=nullObjecCommand;}}public void configureCommand(int position, Command on, Command off){onCommands[position]=on;offCommands[position]=off;}public void executeOnCommand(int position){onCommands[position].execute();}public void executeOffCommand(int position){offCommands[position].execute();}protected class NullObjectCommand implements Command{@Overridepublic void execute() {// NULL-OBJECT-PATTERN}} }具體的命令和動作
在這里,我們可以看到Actions和Commands的具體實現。
public class Door {public void on(){System.out.println("Opening car doors...");}public void off(){System.out.println("Closing car doors...");} } public class OpenDoorCommand implements Command {private Door door;public OpenDoorCommand(Door door) {this.door = door;}@Overridepublic void execute() {door.on();} } public class CloseDoorCommand implements Command {private Door door;public CloseDoorCommand(Door door) {this.door =door;}@Overridepublic void execute() {door.off();} }通用微型船
如您在這里看到的,此實現或此MicroShip可以容納所需數量的命令,并且可以在您可能需要的任何情況下重用。 在此MicroShip波紋管中,我只實現了上面的OpenDoorCommand和CloseDoorCommand,因此您可以看到它的強大功能。 像我一樣,您還可以執行其他命令。這很酷的事情是執行和撤消操作的能力。 創建所需數量的命令并執行所需的動作。 這種圖案的簡單和美麗使我著迷。
public class CarKey {private MicroChip microChip;public CarKey() {final int commandQuantity = 5;microChip = new MicroChip(commandQuantity);final Hood hood = new Hood();final OpenHoodCommand openHoodCmd = new OpenHoodCommand(hood);final CloseHoodCommand closeHoodCmd = new CloseHoodCommand(hood);microChip.configureCommand(0, openHoodCmd, closeHoodCmd);final Door door = new Door();final OpenDoorCommand openDoorCmd = new OpenDoorCommand(door);final CloseDoorCommand closeDoorCmd = new CloseDoorCommand(door);microChip.configureCommand(1, openDoorCmd, closeDoorCmd);final Garage garage = new Garage();final OpenGarageCommand openGarageCmd = new OpenGarageCommand(garage);final CloseGarageCommand closeGarageCmd = new CloseGarageCommand(garage);microChip.configureCommand(2, openGarageCmd, closeGarageCmd);final Trunk trunk = new Trunk();final OpenTrunkCommand openTrunkCmd = new OpenTrunkCommand(trunk);final CloseTrunkCommand closeTrunkCmd = new CloseTrunkCommand(trunk);microChip.configureCommand(3, openTrunkCmd, closeTrunkCmd);final Alarm alarm = new Alarm();final EnableAlarmCommand enableAlarmCmd = new EnableAlarmCommand(alarm);final DisableAlarmCommand disableAlarmCmd = new DisableAlarmCommand(alarm);microChip.configureCommand(4, enableAlarmCmd, disableAlarmCmd);}public void openHood(){microChip.executeOnCommand(0);}public void closeHood(){microChip.executeOffCommand(0);}public void openDoor(){microChip.executeOnCommand(1);}public void closeDoor(){microChip.executeOffCommand(1);}public void openGarage(){microChip.executeOnCommand(2);}public void closeGarage(){microChip.executeOffCommand(2);}public void openTrunk(){microChip.executeOnCommand(3);}public void closeTrunk(){microChip.executeOffCommand(3);}public void enableAlarm(){microChip.executeOnCommand(4);}public void disableAlarm(){microChip.executeOffCommand(4);}}法拉利客戶
最后,我們可以看到這種漂亮的設計模式的用法和功能。 在此示例中,我實現了多個命令來向您展示它的外觀。
public class FerrariClient {public static void main(String[] args) {final CarKey ferrariSwitchbladeKey = new CarKey();ferrariSwitchbladeKey.openHood();ferrariSwitchbladeKey.openGarage();ferrariSwitchbladeKey.openTrunk();ferrariSwitchbladeKey.openDoor();ferrariSwitchbladeKey.enableAlarm();System.out.println("-------------------------------");ferrariSwitchbladeKey.closeHood();ferrariSwitchbladeKey.closeGarage();ferrariSwitchbladeKey.closeTrunk();ferrariSwitchbladeKey.closeDoor();ferrariSwitchbladeKey.disableAlarm();} }就這樣。 希望你喜歡!
翻譯自: https://www.javacodegeeks.com/2014/08/command-design-pattern-applied.html
總結
- 上一篇: 简而言之,JUnit:Hello Wor
- 下一篇: 路由器ddos怎样关闭自动连接(路由器d