设计模式之 Command通俗理解
程序员文章站
2022-03-10 17:17:14
1 command模式定义Commad模式是一种对象行为模式, 它可以对发送者(sender)和接收者(receiver)完全解耦(decoupling)。("发送者" 是请求操作的对象,"接收者" 是接收请求并执行某操作的对象。有了 "解耦",发送者对接收者的接口一无所知。)2 通俗理解简单来看,在对象A调用了对象B的一个方法,这样对象A就可以看做一个发送者,对象B就是一个接收者,在这种情况下,对象A必须知道对象B相应的方法名。如果在这里使用Command模式的话,就相当于在对象A和对象....
1 command模式定义
Commad模式是一种对象行为模式, 它可以对发送者(sender)和接收者(receiver)完全解耦(decoupling)。("发送者" 是请求操作的对象,"接收者" 是接收请求并执行某操作的对象。有了 "解耦",发送者对接收者的接口一无所知。)
2 通俗理解
简单来看,在对象A调用了对象B的一个方法,这样对象A就可以看做一个发送者,对象B就是一个接收者,在这种情况下,对象A必须知道对象B相应的方法名。如果在这里使用Command模式的话,就相当于在对象A和对象B之间加了一个中间层,由中间层来完成这一次的调用,在这种情况下,对象A并不需要知道对象B的方法。
3 如何使用?
举例:将命令封装在一个 Collection 的 List 中,任何对象一旦加入 List 中,实际上装入了一个封闭的黑盒中,对象的特性消失了,只有取出时,才有可能模糊的分辨出。
package xx.study.design.commad;
/**
* 典型的 Command 模式需要有一个接口.
* 接口中有一个统一的方法,这就是"将命令/请求封装为对象
*/
public interface Command {
public void execute ( );
}
package xx.study.design.commad;
public class Engineer implements Command {
public void execute( ) {
//do Engineer's command
System.out.println("开始铺路");
}
}
package xx.study.design.commad;
/**
* 政治家
*/
public class Politician implements Command {
public void execute( ) {
//do Politician's command
System.out.println("开始巡查");
}
}
package xx.study.design.commad;
/**
* 程序设计人员
*/
public class Programmer implements Command {
public void execute( ) {
//do programmer's command
System.out.println("开始设计");
}
}
package xx.study.design.commad;
import java.util.ArrayList;
import java.util.List;
/**
* 将三个command封装起来,扔到黑盒子 List 里去:
*/
public class Producer {
public static List produceRequests() {
List queue = new ArrayList();
queue.add( new Engineer() );
queue.add( new Politician() );
queue.add( new Programmer() );
return queue;
}
}
package xx.study.design.commad;
import java.util.Iterator;
import java.util.List;
public class Customer {
public static void main(String[] args) {
//下发指令
List queue = Producer.produceRequests();
//调用者基本只和接口打交道,不合具体实现交互,这也体现了一个原则,面向接口编程
for (Iterator it = queue.iterator();it.hasNext(); ){
//客户端直接调用 execute 方法,无需知道被调用者的其它更多类的方法名。
((Command)it.next()).execute();
}
}
}
本文地址:https://blog.csdn.net/h4241778/article/details/107887773
上一篇: 递归之汉诺塔