JAVA设计模式(十五)设计模式之命令设计模式

前言

      本章讲解设计模式中命令设计模式的相关知识

方法

1.概念

在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。

比如说老板给员工下达命令,让其执行任务。那么简单的条件下老板的方法可以直接耦合员工对象,调用员工对象进行操作。那么一旦这个命令比较复杂,在执行的前后需要进行相关的操作,那么原来的设计就显得鸡肋了。

这个时候我们可以采用命令设计模式,将员工的执行方法转化为类.

2.命令设计模式的实现思路

1)创建相应的工程

2)创建命令的调用者,也就是我们的老板

package command;

/**
 * 老板类,命令的发送者,这里假设接收一个命令
 * @author jwang
 *
 */
public class Boos {
	
	private Command command;

	public Boos(Command command) {
		super();
		this.command = command;
	}
	
	public void command(){
		this.command.execute();
	}
}

3)创建员工类

package command;

/**
 * 工人类,具体的命令执行者
 * @author jwang
 *
 */
public class Worker {
	private String name;
	
	public Worker(String name) {
		super();
		this.name = name;
	}

	public void work(){
		System.out.println("员工【"+name+"】工作!");
	}
	
	public void study(){
		System.out.println("员工【"+name+"】学习!");
	}
}

4)创建命令抽象类以及具体的实现

package command;

/**
 * 命令接口
 * @author jwang
 *
 */
public interface Command {
	public void execute();
}

两个命令的实现类对应命令执行者的两个方法的执行

StudyCommand:

package command;

/**
 * 具体要执行的命令,学习的命令
 * @author jwang
 *
 */
public class StudyCommand implements Command {

	private Worker worker;
	
	public StudyCommand(Worker worker) {
		super();
		this.worker = worker;
	}

	@Override
	public void execute() {
		this.worker.study();
	}

}

WorkCommand:

package command;
/**
 * 具体要执行的命令,工作的命令
 * @author jwang
 *
 */
public class WorkCommand implements Command {

	private Worker worker;
	
	public WorkCommand(Worker worker) {
		super();
		this.worker = worker;
	}

	@Override
	public void execute() {
		this.worker.work();
	}

}

5)编写测试代码进行测试

package command;

public class Test {

	public static void main(String[] args) {
		//定义两组命令,分别由两个人执行
		StudyCommand studyCommand = new StudyCommand(new Worker("张三"));
		WorkCommand workCommand = new WorkCommand(new Worker("李四"));
		
		//执行命令
		System.out.println("使用命令模式...");
		new Boos(studyCommand).command();
		new Boos(workCommand).command();
		
		//在较为简单的条件下,不用命令模式,耦合度较大
		System.out.println("不使用命令模式...");
		new Worker("张三").study();
		new Worker("李四").work();
	}

}

程序执行结果如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值