Java设计模式-命令模式

最近学习到设计模式,现总结个人学习命令模式内容【注重的是命令发送者与命令执行者解耦 】。
上一篇:Java设计模式-享元模式

定义

将“动作的请求者”从“动作的执行者”对象中解耦。命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。

优缺点

优点

解耦
发起命令者不要再知道具体接受者对象是什么,如何实现的,命令对象会负责让接收则只需请求的动作。

缺点

系统中出现过多的命令类,增加了系统的复杂对。

实现

角色

  • Command:抽象命令接口.
  • ConcreteCommand:具体命令.
  • Receiver:最终执行命令的对象.
  • Invoker:命令对象的入口.
    在这里插入图片描述

代码

Command对象接口以及具体命令

/* 命令接口
 */
public interface Command {
	public void execute();
}
/*//类适配  收音机开机的命令 
class RadioOpenCommand extends RadioAppliances implements Command{  
	@Override
	public void execute() { this.open(); } 
}*/
//对象适配[建议使用对象适配,因收音机可以有多类]  收音机开机的命令 
class RadioOpenCommand implements Command{  
	Appliances appliances;
	public RadioOpenCommand(Appliances appliances) {
		this.appliances = appliances;
	}
	@Override
	public void execute() { this.appliances.open(); } 
}
//对象适配[建议使用对象适配,因收音机可以有多类] 收音关机机的命令
class RadioCloseCommand implements Command{ 
	Appliances appliances;
	public RadioCloseCommand(Appliances appliances) {
		this.appliances = appliances;
	}
	@Override
	public void execute() { this.appliances.close(); } 
}

Receiver最终只需命令的对象,以及对象抽象类

/*  执行命令抽象类
 */
public abstract class Appliances {
	public abstract void open();
	public abstract void close();
}
//最终执行命令具体类
class RadioAppliances extends Appliances{  
	@Override
	public void open() {
		System.out.println("打开收音机...");
	}
	@Override
	public void close() {
		System.out.println("关闭收音机...");
	}
}

Invoker:命令对象的入口.

public class Controller {
	HashMap<Integer,Command> opendcoms=new HashMap<>();
	HashMap<Integer,Command> colsecoms = new HashMap<>();
	// 给我们的按钮设置你需要的命令
	public void setCommand(int no, Command opencom, Command closcom) {
		opendcoms.put(no, opencom);
		colsecoms.put(no, closcom);
	}
	//执行打开命令
	public void open(int on){
		opendcoms.get(on).execute();
	}
	//执行关闭命令
	public void close(int on){
		colsecoms.get(on).execute();
	}
}

测试

在这里插入图片描述

命令模式重点在于命令发送者与命令执行者解耦
以上仅为个人学习,如果错误望指出,谢谢。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值