当前位置: 代码迷 >> 综合 >> Interface 接口的命令模式
  详细解决方案

Interface 接口的命令模式

热度:12   发布时间:2023-11-23 05:21:57.0

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

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

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


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

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

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


我的实现代码:
package CommandImplement;/*** 定义接口,接口函数是处理目标数组*/
public interface Command {void progress(int[] target);
}
实现接口:
//打印每个数字的实现
public class PrintCommand implements Command {@Overridepublic void progress(int[] target) {for (int tmp : target) {System.out.println("打印命令" + tmp);}}}


//对数组求和的实现
public class AddCommand implements Command {int sum = 0;@Overridepublic 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());}
}




  相关解决方案