文档章节

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



© 著作权归作者所有

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

王大叔爱编程

粉丝 33
博文 113
码字总数 63525
作品 0
成都
程序员
20个设计模式和软件设计面试问题

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

LCZ777
2014/08/13
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
设计模式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
设计模式3——Proxy设计模式

Proxy代理设计模式是一种控制对象访问的设计模式,类似于网络代理,网络代理机制如下图: Proxy代理设计模式机制如下: 代理模式UML图如下: 代理模式顺序图如下: 客户端程序通过代理程序来...

小米米儿小
2013/12/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java并发备忘

不安全的“先检查后执行”,代码形式如下: if(条件满足){ //这里容易出现线程安全问题//doSomething}else{//doOther} 读取-修改-写入 原子操作:使用CAS技术,即首先从V中读取...

Funcy1122
今天
0
0
SpringBoot2.0 停机

最近新建了个SpringBoot2.0的项目,因为原来一直使用的是传统的Tomcat部署war包的形式,所以这次SpringBoot内置Tomcat部署jar包的时候遇到了很多问题。其中一个就是因为没有外置的Tomcat容器...

Canaan_
昨天
0
1
Confluence 6 外部参考

一个外部参考的意思是任何站点链接到你 Confluence 的实例。任何时候当 Confluence 的用户单击这个外部链接的时候,Confluence 可以记录这次单击为参考。 在默认的情况下,外部链接的参考链接...

honeymose
昨天
0
0
Android中的设计模式之抽象工厂模式

参考 《设计模式解析》 第十一章 Abstract Factory模式 《设计模式:可复用面向对象软件的基础 》3.1 Abstract Factory 抽象工厂 对象创建型模式 《Android源码设计模式解析与实战》第6章 创...

newtrek
昨天
0
0
Redis | 地理空间(GEO)的一个坑

Redis的地理空间(Geo)是个好东西,轻轻松松的就可以把地图描点的问题处理了, 最近却遇到一个坑...Redis采用的Msater-Slave模式, 运用GEORADIUS在salve读取对应的数据,新增了从节点但是从不返...

云迹
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部