文档章节

java设计模式_命令模式

王大叔爱编程
 王大叔爱编程
发布于 2013/11/22 17:16
字数 500
阅读 43
收藏 1
 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;
		
	}
}



© 著作权归作者所有

共有 人打赏支持
王大叔爱编程

王大叔爱编程

粉丝 34
博文 111
码字总数 61053
作品 0
成都
程序员
私信 提问
设计模式 2014-12-19

book: 阎宏《JAVA与模式》 架构设计栏目 http://blog.csdn.net/enterprise/column.html 概要: http://bbs.csdn.net/forums/Embeddeddriver 23种设计模式分别是: 1.单例模式 2.工厂方法模式...

jayronwang
2014/12/19
0
0
设计模式15——Template Method设计模式

Template Method模板方法设计模式定义一个操作中算法的骨架,将具体步骤的执行延迟到子类中实现。Java中的抽象类就是使用了模板方法设计模式。模板方法设计模式结构如下: 以文档处理为例,T...

小米米儿小
2014/01/24
0
0
简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别

转载:原地址http://www.cnblogs.com/zhangchenliang/p/3700820.html 简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别 结合简单示例和UML图,讲解工厂模式简单原理。 一、引子 话说...

法斗斗
05/08
0
0
策略模式与SPI机制,到底有什么不同?

这里说的策略模式是一种设计模式,经常用于有多种分支情况的程序设计中。例如我们去掉水果皮,一般来说对于不同的水果,会有不同的拨皮方式。此时用程序语言来表示是这样的: 如上面代码所写...

陈树义
09/03
0
0
学了那么多年设计模式依然不会用!那可真蠢!

什么是设计模式? 设计模式(Design Pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决...

GitChat技术杂谈
10/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

linux中shell if 判断总结

UNIX Shell 里面比较字符写法 -eq 等于; -ne 不等于; -gt 大于; -lt 小于 ; -le 小于等于; -ge 大于等于; -z 空串; -n 非空串; = 两个字符相等; != 两个字符不等 无论什么编程语言都离不开条...

linuxprobe16
21分钟前
0
0
我是如何将博客转成PDF的

前言 只有光头才能变强 之前有读者问过我:“3y你的博客有没有电子版的呀?我想要份电子版的”。我说:“没有啊,我没有弄过电子版的,我这边有个文章导航页面,你可以去文章导航去找来看呀”...

Java3y
23分钟前
1
0
nginx的一些总结

Linux下安装Nginx完整教程及常见错误解决方案 1.Nginx安装环境 Nginx是C语言开发,建议在linux上运行,本教程使用Centos7.0作为安装环境. 1)gcc 安装nginx需要先将官网下载的源码进行编译,编译...

Yao--靠自己
30分钟前
1
0
Predicate函数式接口

Predicate接口主要用于流的筛选,比如在filter方法中传入Predicate判断。 作为函数式接口,这里居然有三个default方法,一个static方法,子孙满堂! 正统的接口方法,就是boolean test(T t)...

woshixin
31分钟前
1
0
sql 开窗函数

开窗函数:在开窗函数出现之前存在着很多用 SQL 语句很难解决的问题,很多都要通过复杂的相关子查询或者存储过程来完成。为了解决这些问题,在 2003 年 ISO SQL 标准加入了开窗函数,开窗函数...

hblt-j
42分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部