Interface 接口的命令模式

接口实现命令,降低耦合度

 在软件开发中,我们经常需要向某些对象发送请求(调用其中的某个或某些方法),但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,此时,我们特别希望能够以一种松耦合的方式来设计软件,使得请求发送者与请求接收者能够消除彼此之间的耦合,让对象之间的调用关系更加灵活,可以灵活地指定请求接收者以及被请求的操作。命令模式为此类问题提供了一个较为完美的解决方案。

       命令模式可以将请求发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求


优点
1.降低对象之间的耦合度。
2.新的命令可以很容易地加入到系统中。
3.可以比较容易地设计一个组合命令。
4.调用同一方法实现不同的功能

缺点
使用命令模式可能会导致某些系统有过多的具体命令类。因为针对每一个命令都需要设计一个具体命令类,因此某些系统可能需要大量具体命令类,这将影响命令模式的使用。

适用情况
1.系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互。
2.系统需要在不同的时间指定请求、将请求排队和执行请求。
3.系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作。
4.系统需要将一组操作组合在一起,即支持宏命令。


我的实现代码:
package CommandImplement;

/**
 * 定义接口,接口函数是处理目标数组
 */
public interface Command {
	void progress(int[] target);
}
实现接口:
//打印每个数字的实现
public class PrintCommand implements Command {

	@Override
	public void progress(int[] target) {
		for (int tmp : target) {
			System.out.println("打印命令" + tmp);
		}
	}

}


//对数组求和的实现
public class AddCommand implements Command {
	int sum = 0;

	@Override
	public void progress(int[] target) {
		for (int tmp : target) {
			sum += tmp;
		}
		System.out.println("数组的总和是:" + sum);
	}

}


调用接口:

/**
 * 通过command接口,用类ProcessArray实现了具体的处理行为与上一级分离
 */
public class ProcessArray {
	public void process(int[] target, Command cmd) {
		cmd.progress(target);
	}
}


主函数:


public class CommandTest {
	public static void main(String[] args) {
		ProcessArray pa = new ProcessArray();
		int [] target ={1,2,3,4,5,6};
		//通过new出来的类来实现命令模式
		pa.process(target, new PrintCommand());
		System.out.println("--------------------");
		pa.process(target, new AddCommand());
		
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值