设计模式(12)- 命令模式

命令模式

1.定义

       将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数话,对请求排队或者记录请求日志,以及支持可撤销的操作。

2.示例代码

       使用命令模式模拟开机,机箱尚的按钮相当于命令对象,主板相当于接收者,机箱相当于Invoker要求按钮命令对象执行开机请求。

  

/*主板接口*/
public interface MainBoard{
    //主板具有开机功能
    public void open();
}

/*技嘉主板,开机命令真正实现者*/
public class GAMainBoard implements MainBoard{
    //真正开机命令实现
    System.out.println("技嘉主板现在正在开机,请稍后");
    System.out.println("接通电源...");
    System.out.println("检查设备...");
    System.out.println("装载系统...");
    System.out.println("机器正常运转起来...");
    System.out.println("机器已经正常打开,请操作");
}

   

/*命令接口*/
public interface Command{
   public void execute();
}

/*开机命令实现*/
public class OpenCommand implements Command{
   //持有真正命令接收者,主板对象
   private  MainBoard mainBoard = null;
   public OpenCommand(MainBoard mainBoard){
       this.mainBoard = mainBoard;
   }
   //对于命令对象,转调主板对象的开机操作
   public void execute(){
       this.mainBoard.open();
   }
}

/*机箱触发命令对象发起开机请求*/
public class Box{
   //开机命令对象
   private  Command openCommand;
   public void setOpenCommand(Command openCommand){
       this.openCommand = openCommand;
   }
   /*提供用户使用,接收并响应用户请求,相当于按钮被按下,触发方法*/
   public void  openButtonPressed(){
       openCommand.execute();
   }
}

   

/*客户开机操作*/
public class Client{
    public static void main(String args[]){
       //1.装配开机对象
       MainBoard mainBoard = new GAMainBoard();
       Command openCommand = new OpenCommand(mainBoard);
       //2.为机箱上的按钮设置相应的命令
       Box box = new Box();
       box.setOpenCommand(openCommand);
       //3.按下开机按钮
       box.openButtonPressed();
    } 
}

3.实际应用

       命令模式的关键之处就是把请求封装成对象,也就是命令对象,并定义了统一的执行操作接口,这个命令对象可以被存储,转发,记录,处理,撤销等,整个命令模式都是围绕这个命令对象在进行。

命令模式的本质:封装请求

猜你喜欢

转载自renhanxiang.iteye.com/blog/2407657