1.抽象出待执行的动作以参数化某对象。
2.在不同的时刻指定、排列和执行请求。
3.支持取消操作。
4.支持修改日志,这样当系统崩溃时,这*修改可以被重做一遍。
5.用构建在原语操作上的高层操作构造一个系统。
Command模式可应用于
a)整个调用过程比较繁杂,或者存在多处这种调用。这时,使用Command类对该调用加以封装,便于功能的再利用。
b)调用前后需要对调用参数进行某些处理。
c)调用前后需要进行某些额外处理,比如日志,缓存,记录历史操作等。
http://www.cnblogs.com/devinzhang/archive/2012/01/06/2315235.html
package com.wangbiao.command;
import java.math.BigDecimal;
public class Client {
public static void main(String[] args) {
//receiver
Project project=new Project("中国人民银行在线支付系统",new BigDecimal(5000000),new BigDecimal(1000000));
//Command
Command development=new DevelopmentCheck(project);
Command finacial=new FinancialCheck(project);
Command market=new MarketCheck(project);
Company company=new Company(market,development,finacial);
//invoker
company.check_project();
}
}
package com.wangbiao.command;
public interface Command {
//undo
public void command_undo();
//check
public void check_project();
}
package com.wangbiao.command;
public class Company {
private Command marketCheck,developmentCheck,finacialCheck;
public Company() {
}
public Company(Command marketCheck,Command developmentCheck,Command finacialCheck) {
this.marketCheck=marketCheck;
this.developmentCheck=developmentCheck;
this.finacialCheck=finacialCheck;
}
public void check_project(){
this.marketCheck.check_project();
this.developmentCheck.check_project();
this.finacialCheck.check_project();
}
}
package com.wangbiao.command;
public class DevelopmentCheck implements Command{
private Project project;
public DevelopmentCheck() {
}
public DevelopmentCheck(Project project) {
this.project=project;
}
@Override
public void command_undo() {
}
@Override
public void check_project() {
System.out.println("Development department begin to check.");
System.err.println("Development Department: "+this.project.show_project_detail_info());
System.out.println("Development Department: "+this.project.show_project_detail_info());
System.out.println("Development department end check.");
}
}
package com.wangbiao.command;
public class FinancialCheck implements Command{
private Project project;
public FinancialCheck() {
// TODO Auto-generated constructor stub
}
public FinancialCheck(Project project) {
this.project=project;
}
@Override
public void command_undo() {
// TODO Auto-generated method stub
}
@Override
public void check_project() {
System.out.println("Financial department begin to check.");
System.err.println("Financial Department: "+this.project.show_project_detail_info());
System.out.println("Financial Department: "+this.project.show_project_detail_info());
System.out.println("Financial department end check.");
}
}
package com.wangbiao.command;
public class MarketCheck implements Command {
private Project project;
public MarketCheck() {
}
public MarketCheck(Project project) {
this.project=project;
}
@Override
public void command_undo() {
}
@Override
public void check_project() {
System.out.println("Market department begin to check.");
System.err.println("Market Department: "+this.project.show_project_detail_info());
System.out.println("Market Department: "+this.project.show_project_detail_info());
System.out.println("Market department end check.");
}
}
package com.wangbiao.command;
import java.math.BigDecimal;
public class Project {
private String f_name;
private BigDecimal f_cost;
private BigDecimal f_profit;
public Project() {
}
public Project(String f_name,BigDecimal f_cost,BigDecimal f_profit) {
this.f_name=f_name;
this.f_cost=f_cost;
this.f_profit=f_profit;
}
public String show_project_detail_info(){
return "项目名称: "+f_name+"-"+" 项目成本: "+f_cost+"-"+" 项目利润: "+f_profit;
}
}