java設計模式-Command模式


1.背景:                  

站在MM的角度,想命令追求者Boy干什么就干什么,而且將來還可以擴展,怎么做?
 
2.代碼:                  
Command.java:
package com.cy.dp.command;

public abstract class Command {
    
    public abstract void execute();        //執行命令
    public abstract void undo();        //取消執行命令
    
}

Command的實現類ShoppingCommand:(逛街命令)

package com.cy.dp.command;

public class ShoppingCommand extends Command {

    @Override
    public void execute() {
        System.out.println("zoo");
    }

    @Override
    public void undo() {
        System.out.println("undo zoo");
    }

}
View Code

Command的實現類HugCommand:(擁抱命令)

package com.cy.dp.command;

public class HugCommand extends Command{

    @Override
    public void execute() {
        System.out.println("hug");
    }

    @Override
    public void undo() {
        System.out.println("open your arms");
    }

}
View Code

Boy.java:

package com.cy.dp.command;

import java.util.ArrayList;
import java.util.List;

public class Boy {
    private String name;
    private List<Command> commands = new ArrayList<Command>();
    //private List<Command> doCommands;        裝的是已經執行過的command,用於undo
    
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
    public void pursue(MM mm){
    }
    
    public void executeCommands(){
        for(Command c : commands){
            c.execute();
        }
    }
    public void undoCommands(){
        //循環doCommands來undo
        //用棧來操作,最后執行的操作先undo
    }
    
    
    public void addCommand(Command c){
        this.commands.add(c);
    }
    
}

MM.java:

package com.cy.dp.command;

public class MM {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
    //MM命令Boy做什么
    public void order(Boy b){
        Command c1 = new ShoppingCommand();
        Command c2 = new HugCommand();
        b.addCommand(c1);
        b.addCommand(c2);
        b.executeCommands();
    }
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM