命令模式是将一组操作调用封装在一个对象中,这个对象称为命令对象。比如我们可以有一个专门用于开关电器的命令,调用这个命令就可以开关电器。systemstartrefrigeratorsystemcloserefrigeratorsystemstartairconditionersystemcloseairconditioner那么我们可以写一个关于电器的命令类,在创建对象的时候可以结合具体的电器来控制具体的电器。即我们可以为您将系统启动和系统关闭封装成一个对象,然后该对象可以与空调、冰箱等家电结合,实现系统关闭空调的功能。命令模式中有以下角色抽象命令:所有命令的父类,定义执行命令的抽象接口,声明绑定到命令的被调用者成员。具体命令:实现具体的执行细节。抽象被调用者:定义了被调用者可以调用的函数方法。特定调用者:实现特定产品的被调用方法的具体细节。调用者:设置具体的调用命令,实现调用方法。下面用一个软件实例来实现命令模式abstractcommandpublicabstractclassCommand{Softwaresoftware;公共命令(软件软件){this.software=software;}abstractvoidexecute();}具体命令——打开、操作、关闭}@Overridevoidexecute(){software.open();}}publicclassOperateSoftwareCommandextendsCommand{publicOperateSoftwareCommand(Softwaresoftware){super(software);}@Overridevoidexecute(){software.operate();}}publicclassCloseSoftwareCommandextendsCommand{publicCloseSoftwareCommand(Softwaresoftware){super(software);}@Overridevoidexecute(){software.close();}}抽象调用者-软件公共接口软件{/***打开软件*/voidopen();/***运行软件*/voidoperate();/***关闭软件*/voidclose();具体的被调用者-微信公共类微信实现软件{@Overridepublicvoidopen(){System.out.println("打开微信");}@Overridepublicvoidoperate(){System.out.println("微信聊天");}@Overridepublicvoidclose(){System.out.println("启动微信");}}callerpublicclassInvoker{命令命令;publicInvoker(){}publicvoidsetCommand(Commandcommand){this.command=command;}publicvoidexecute(){command.execute();}}testpublicclassCommandTest{@Testpublicvoidtest(){Invokerinvoker=newInvoker();命令command=newOpenSoftwareCommand(newWechat());调用者.setCommand(命令);调用者.execute();command=newOperateSoftwareCommand(newWechat());invoker.setCommand(命令);调用者.execute();}}======Result======打开微信微信聊天
