设计模式之命令模式

1,为什么要使用命令设计模式

当我们有一台多功能的打印机,然后通过电脑直接进行任务,如图

如果通过这样的设计直接去调用多功能一体机的功能,就会存在此时此刻只能进行一个任务,不允许有多个客户端同时操作.

2,什么是命令设计模式

那么现在我们就需要考虑一种新的设计模式,叫做命令设计模式。

命令设计模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以支持可撤销操作.

3,怎么使用命令设计模式

按照设计模式的概念将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,我们有必要去写一个命令的接口,下面继承各类命令。对请求排队或记录请求日志,以

支持可撤销操作.我们需要去写一个服务类与命令聚合,这样我们只需要调用服务类就可以执行命令,然后通过命令去执行一体机的操作.

UML如下:

按照这样的设计有如下几点好处:

1,可以较为容易设计一个命令队列
2,在需要情况下可以较容易地将命令记入日志
3,允许接收请求的一方决定是否要否决请求
4,可以容易地实现对请求的撤销和重做
5,增加命令类操作遵守了开闭原则
6,命令模式把请求一个操作对象与指导怎么执行一个操作的对象分隔开

源代码:

多功能一体机.class

public class 多功能一体机 {
	public void 复印(){
		System.out.println("复印执行");
	}
	public void 打印(){
		System.out.println("打印执行");
	}
	public void 传真(){
		System.out.println("传真执行");
	}
}

命令.class

public interface 命令 {
	public void 执行命令(多功能一体机 machine);
}

打印.class

public class 打印 implements 命令{

	@Override
	public void 执行命令(多功能一体机 machine) {
		// TODO Auto-generated method stub
		machine.打印();
	}


}

传真.class

public class 传真 implements 命令{

	@Override
	public void 执行命令(多功能一体机 machine) {
		// TODO Auto-generated method stub
		machine.传真();
	}


}

复印.class

public class 复印 implements 命令{

	@Override
	public void 执行命令(多功能一体机 machine) {
		// TODO Auto-generated method stub
		machine.复印();
	}

}

多功能一体机服务程序.class

public class 多功能一体机服务程序 {
	private ArrayList<命令> 任务列表 = new ArrayList<命令>();
	private 多功能一体机 machine = null;
	public 多功能一体机服务程序(多功能一体机 machine){
		this.machine = machine;
	}
	public void 加入任务(命令 cmd){
		任务列表.add(cmd);
	}
	public void 移除任务(命令 cmd){
		任务列表.remove(cmd);
	}
	public void 执行任务(){
		for(命令 cmd :任务列表){
			cmd.执行命令(machine);
		}
	}
}

Main.class

public class Main {
	public static void main(String[] args){
		多功能一体机 多功能一体机 = new 多功能一体机();
		多功能一体机服务程序 多功能一体机服务程序 = new 多功能一体机服务程序(多功能一体机);
		复印 复印 = new 复印();
		打印 打印 = new 打印();
		传真 传真 = new 传真();
		多功能一体机服务程序.加入任务(复印);
		多功能一体机服务程序.加入任务(打印);
		多功能一体机服务程序.加入任务(传真);
		多功能一体机服务程序.移除任务(打印);
		多功能一体机服务程序.执行任务();
	}
}

最后输出:

复印执行
传真执行

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值