1700478040
}
1700478041
1700478042
}
1700478043
1700478044
这就是一个具体动作执行者,它在策略模式中是一个具体的算法,关心的是是否可以被替换;而在命令模式中,它则是一个具体、真实的命令执行者。我们再来看gzip接收者,如代码清单32-13所示。
1700478045
1700478046
代码清单32-13 gzip接收者
1700478047
1700478048
public class GzipReceiver implements IReceiver{
1700478049
1700478050
//gzip的压缩算法
1700478051
1700478052
public boolean compress(String source,String to){
1700478053
1700478054
System.out.println(source+”—>”+to+“GZIP压缩成功!”);
1700478055
1700478056
return true;
1700478057
1700478058
}
1700478059
1700478060
//gzip解压缩算法
1700478061
1700478062
public boolean uncompress(String source,String to){
1700478063
1700478064
System.out.println(source+”—>”+to+“GZIP解压缩成功!”);
1700478065
1700478066
return true;
1700478067
1700478068
}
1700478069
1700478070
}
1700478071
1700478072
大家可以这样思考这个问题,接收者就是厨房的厨师,具体要哪个厨师做这道菜则是餐馆的规章制度已经明确的,你让专做粤菜的师傅做一个剁椒鱼头,能做出好菜吗?在命令模式中,就是在抽象命令中定义了接收者的引用,然后在具体的实现类中确定要让哪个接收者进行处理。这就好比是客人点菜:我要一个剁椒鱼头,这就是一个命令,然后服务员(Inovker)接收到这个命令后,就开始执行,把这个命令指定给具体的执行者执行。
1700478073
1700478074
当然了,接收者这部分还可以这样设计,即按照职责设计接收者,比如压缩接收者、解压缩接收者,但接口需要稍稍改动,如代码清单32-14所示。
1700478075
1700478076
代码清单32-14 依照职责设计的接收者接口
1700478077
1700478078
public interface IReceiver{
1700478079
1700478080
//执行zip命令
1700478081
1700478082
public boolean zipExec(String source,String to);
1700478083
1700478084
//执行gzip命令
1700478085
1700478086
public boolean gzipExec(String source,String to);
1700478087
1700478088
}
1700478089
[
上一页 ]
[ :1.70047804e+09 ]
[
下一页 ]