1700478109
1700478110
System.out.println(source+”—>”+to+“ZIP压缩成功!”);
1700478111
1700478112
return true;
1700478113
1700478114
}
1700478115
1700478116
}
1700478117
1700478118
代码清单32-16 解压缩接收者
1700478119
1700478120
public class UncompressReceiver implements IReceiver{
1700478121
1700478122
//执行gzip解压缩命令
1700478123
1700478124
public boolean gzipExec(String source,String to){
1700478125
1700478126
System.out.println(source+”—>”+to+“GZIP解压缩成功!”);
1700478127
1700478128
return true;
1700478129
1700478130
}
1700478131
1700478132
//执行zip解压缩命令
1700478133
1700478134
public boolean zipExec(String source,String to){
1700478135
1700478136
System.out.println(source+”—>”+to+“ZIP解压缩成功!”);
1700478137
1700478138
return true;
1700478139
1700478140
}
1700478141
1700478142
}
1700478143
1700478144
剩下的工作就是对抽象命令、具体命令稍作修改,这里不再赘述。为什么要在这里增加一个分支描述呢?这是为了与策略模式对比,在命令模式中,我们可以把接收者设计得与策略模式的算法相同,也可以不相同。我们按照职责设计的接口就不适用于策略模式,不可能封装一个叫做压缩的算法类,然后在类中提供两种不同格式的压缩功能,这违背了策略模式的意图——封装算法,为什么呢?如果要增加一个rar压缩算法,该怎么办呢?修改抽象算法?这是绝对不允许的!那为什么命令模式就是允许的呢?因为命令模式着重于请求者和接收者解耦,你管我接收者怎么变化,只要不影响请求者就成,这才是命令模式的意图。
1700478145
1700478146
命令、接收者都具备了,我们再来封装一个命令的调用者,如代码清单32-17所示。
1700478147
1700478148
代码清单32-17 调用者
1700478149
1700478150
public class Invoker{
1700478151
1700478152
//抽象命令的引用
1700478153
1700478154
private AbstractCmd cmd;
1700478155
1700478156
public Invoker(AbstractCmd_cmd){
1700478157
1700478158
this.cmd=_cmd;
[
上一页 ]
[ :1.700478109e+09 ]
[
下一页 ]