文档章节

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;
		
	}
}



© 著作权归作者所有

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

王大叔爱编程

粉丝 35
博文 113
码字总数 63525
作品 0
成都
程序员
私信 提问
从 Java 到 Scala (三): object 的应用

本文由 Captain 发表在 ScalaCool 团队博客。 在上篇 Java 到 Scala 系列中,我想你或多或少在语言特性上对有了一定的掌握,在了解完它酷酷的语言特性——让静态回归常态并能简单运用其衍生出...

ScalaCool
09/10
0
0
20个设计模式和软件设计面试问题

不管是参加Java面试还是C#面试,设计模式和软件设计都是任何编程面试中的必问问题。实际上,编程能力和设计技巧是对彼此很好的补充。一个好的程序员通常都是一个好的软件设计人员。他们知道怎...

LCZ777
2014/08/13
0
0
设计模式知识汇总(附github分享)

写在前面 主要内容 为了更系统的学习设计模式,特地开了这样一个基于Java的设计模式【集中营】,都是笔者在实际工作中用到过或者学习过的一些设计模式的一些提炼或者总检。慢慢地初见规模,也...

landy8530
10/10
0
0
设计模式: Java中的工厂设计模式

原文链接 https://github.com/shellhub/blog/issues/22 前言 工厂设计模式(Factory Design Pattern)属于创建模式之一,工厂设计模式在JDK,Spring,Stuts被广泛使用 当一个类或者接口有多个子类...

shellhub
08/22
0
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

没有更多内容

加载失败,请刷新页面

加载更多

nuc970 uboot nand-boot,kernel, filesystem 烧录位置

一 烧写到Nand Flash **1.1 **相关文件说明 l BSP版本:nuc970bsp-release-20150519.zip l NuWriter版本:2015/04/28-V01,nuvoTon Nu-Writer V1.0 l 烧写文件: u-boot-spl.bin:负责将u-b......

CookieDemo
56分钟前
1
0
python中sort和sorted函数小结

L.sort(cmp=None, key=None, reverse=False) sorted(iterable, cmp=None, key=None, reverse=False) 这样看,sorted函数只比sort函数多一个iterable参数,其余没什么不同,iterable是一个迭代......

上官夏洛特
今天
3
0
thinkphp 常用SQL执行语句总结

第一条:Db::tablera('vr_panomas')->where(['delete_time'=>0,'id'=>['in',$pids]])->field(['id'=>'id','post_thumb'=>'thumb','post_title'=>'title','post_tags'=>'tags','post_price'=>......

koothon
今天
5
0
支付宝返回状态resultStatus意思

上一篇集成支付宝的时候,会有一些支付宝返回的resultStatus,具体意思是: 9000 订单支付成功 8000 正在处理中 4000 订单支付失败 6001 用户中途取消 6002 网络连接出错 还有memo,意思就是...

RainOrz
今天
3
0
electron webview 页面加载事件顺序

1.did-start-loading 页面开始加载 2.load-commit 主页面文档加载 3.page-title-updated title 4.dom-ready 主页面 dom 加载完成 5.load-commit frame文档加载 6.did-frame-finish-load fram......

dubox
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部