文档章节

java设计模式_命令模式

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



© 著作权归作者所有

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

王大叔爱编程

粉丝 32
博文 104
码字总数 63525
作品 0
成都
程序员
简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别

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

法斗斗 ⋅ 05/08 ⋅ 0

java开发中的常用的设计模式

设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代...

qq_38024548 ⋅ 05/28 ⋅ 0

Java 设计模式(14) —— 复合模式

一、复合模式 模式常一起使用,组合在一个设计解决方案中 复合模式在一个解决方案中结合两个或多个模式,能解决一般性或一系列的问题 二、示例 本次设计模式讲解中无代码示例,由于复合模式是...

磊_lei ⋅ 05/26 ⋅ 0

Java 设计模式 之 单例模式 Singleton 实际应用

Java 设计模式 之 单例模式 Singleton 实际应用 http://www.verejava.com/?id=16998954233354

verejava ⋅ 05/24 ⋅ 0

【唯品会】设计模式在特卖会的应用与思考

设计模式在特卖会的应用与思考 无心之心,道之所存 --《建筑的永恒之道》 1、开篇 之所以讨论设计模式,是因为当前我们都明白它可以提供优雅的解决方案,有利于在团队项目中建立共识,并且无...

暗夜在火星 ⋅ 2016/11/12 ⋅ 0

代理模式(Proxy Pattern):动态代理 - 最易懂的设计模式解析

前言 今天我来全面总结开发中最常用的设计模式 - 代理模式中的动态代理模式 其他设计模式介绍 1分钟全面了解“设计模式” 单例模式(Singleton) - 最易懂的设计模式解析 简单工厂模式(Sim...

Carson_Ho ⋅ 04/09 ⋅ 0

Java篇-接口interface关键字

一 : interface关键字 接口是与类并行的一个概念 Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,...

TianTianBaby223 ⋅ 04/24 ⋅ 0

为什么我墙裂建议大家使用枚举来实现单例。

关于单例模式,我的博客中有很多文章介绍过。作为23种设计模式中最为常用的设计模式,单例模式并没有想象的那么简单。因为在设计单例的时候要考虑很多问题,比如线程安全问题、序列化对单例的...

⋅ 06/10 ⋅ 0

详解Proxy代理模式的场景分析

代理模式是一个十分优秀的软件架构模式,许多应用都用到了代理模式。代理模式就是为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不合适或者不能直接引用另一个对象,...

Java架构 ⋅ 05/30 ⋅ 0

你需要了解的23种JavaScript设计模式

为什么要学习设计模式? 在许多访谈中,你可能会遇到很多面向对象编程中的接口,抽象类,代理和以及其他与设计模式相关的问题。 一旦了解了设计模式,它会让你轻松应对任何访谈,并可以在你的...

java高级架构牛人 ⋅ 06/02 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

对于程序员的招聘问题,作为软件人的一些吐槽和建议

作为软件人,找工作有时候似乎挺苦逼的。 说真的,让我去掉前面这句中“似乎”二字吧。就是苦逼!很多人都曾抱怨处在招聘的一方很糟糕——我们没有任何可靠的方式来甄别会写代码并且写得好的...

老道士 ⋅ 14分钟前 ⋅ 0

HDFS原理学习

一、概述 1、 Hadoop整合了众多的文件系统,首先提供了一个高层的文件系统抽象org.apache.hadoop.fs.FileSystem。然后有各个文件系统的实现类。 2、Hadoop是JAVA编写的,不同文件系统之间的交...

cjxcloud ⋅ 18分钟前 ⋅ 0

Linux下MySQL表名不区分大小写的设置方法(抄袭别人的)

Linux下MySQL表名不区分大小写的设置方法 MySQL表名不区分大小写的设置方法 在用centox安装mysql后,把项目的数据库移植了过去,发现一些表的数据查不到,排查了一下问题,最后发现是表名的大...

随风而浮沉 ⋅ 23分钟前 ⋅ 0

ubuntu下安装宋体simsun

sudo cp simsun.ttc /usr/share/fonts cd /usr/share/fonts sudo chmod 644 simsun.ttc 更新字体缓存: 代码: sudo mkfontscale 代码: sudo mkfontdir 代码: sudo fc-cache -fsv 安装chrome扩......

wangxuwei ⋅ 24分钟前 ⋅ 0

利用 ssh 传输文件

Linux 下一般可以用 scp 命令通过 ssh 传送文件: #把服务器上的 /home/user/a.txt 发送到本机的 /var/www/local_dir 目录下scp username@servername:/home/user/a.txt /var/www/local_dir...

大灰狼时间 ⋅ 34分钟前 ⋅ 0

web3j教程:android和java程序员如何使用web3j开发区块链以太坊

如何使用web3j为Java应用或Android App增加以太坊区块链支持,本教程内容即涉及以太坊中的核心概念,例如账户管理包括账户的创建、钱包创建、交易转账,交易与状态、智能合约开发与交互、过滤...

智能合约 ⋅ 56分钟前 ⋅ 0

web3j开发java或android以太坊智能合约快速入门

web3j简介 web3j是一个轻量级、高度模块化、响应式、类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以太坊网络上的客户端(节点)进行集成。 可以通过它进行以太坊区块链...

笔阁 ⋅ 59分钟前 ⋅ 0

一起读书《深入浅出nodejs》-异步I/O

异步I/O “异步”这个名词其实很早就诞生了,但它大规模流行却是在Web 2.0浪潮中,它伴随着AJAX的第一个A(Asynchronous)席卷了Web。 为什么要异步I/O 关于异步I/O为何在Node里如此重要,这与...

小草先森 ⋅ 今天 ⋅ 0

JVM各种问题

1、如果启动什么都不设,会怎样? 先来看一个命令 [root@localhost bin]# java -XX:+PrintCommandLineFlags -version -XX:InitialHeapSize=29899008 -XX:MaxHeapSize=478384128 -XX:+PrintCo......

算法之名 ⋅ 今天 ⋅ 0

SAS笔记-宏2

宏是一种文本,一般来说其编译是在程序执行之前。 宏变量的创建 %let语句 %let macro_variables = text; %let是常见的宏变量建立方式,其编译就在执行前。如下例中,想要宏变量test等于数据集...

tonorth123 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部