java设计模式_命令模式

本文深入探讨了命令模式在复杂系统调用过程中的优势,包括如何封装调用以实现功能重用,以及在调用前后进行额外处理如日志记录、缓存和历史操作记录。通过具体案例展示了如何在不同部门间执行检查任务。
 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;
		
	}
}



转载于:https://my.oschina.net/u/617909/blog/178350

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值