象":
程序代码:
public interface Command { public abstract void execute ( );}
//具体不同命令/请求代码是实现接口 Command,下面有三个具体命令
程序代码:
public class Engineer implements Command {
public void execute( ) { //do Engineer's command }
}
public class Programmer implements Command {
public void execute( ) { //do programmer's command }
}
public class Politician implements Command {
public void execute( ) { //do Politician's command }
}
按照通常做法,我们就可以直接调用这三个 Command,但是使用 Command 模式,我们要将他们封装起来,
扔到黑盒子 List 里去:
程序代码:
public class producer{
public static List produceRequests() {
List queue = new ArrayList();
queue.add( new DomesticEngineer() );
queue.add( new Politician() );
queue.add( new Programmer() );
return queue; }
}
这三个命令进入 List 中后,已经失去了其外表特征,以后再取出,也可能无法分辨出谁是 Engineer
谁是 Programmer 了,看下面如何调用 Command 模式:
程序代码:
public class TestCommand {
public static void main(String[] args) {
List queue = Producer.produceRequests();
for (Iterator it = queue.iterator(); it.hasNext(); )
//取出 List 中东东,其他特征都不能确定,只能保证一个特征是 100%正确,// 他们至少是接口 Command
的"儿子".所以强制转换类型为接口
Command((Command)it.next()).execute();
}
}
DAO:
由此可见,调用者基本只和接口打交道,不合具体实现交互,这也体现了一个原则,面向接口编程,这样,以
后增加第四个具体命令时,就不必修改调用者 TestCommand 中的代码了.
12
“
”
、谈一下对 保障软件质量 的理解。