这是我的命令接口:
public interface IConverter {
void convert();
}这是我的接受者课:
public class Ogg extends Audio{
private File src;
private File trgt;
public static final String CODEC = "libvorbis";
public static final String FORMAT = "ogg";
public Ogg(File src, File trgt){
this.src = src;
this.trgt = trgt;
}
public void convertToOgg(){
audioAttr.setCodec(CODEC);
encoAttrs.setFormat(FORMAT);
encoAttrs.setAudioAttributes(audioAttr);
try {
encoder.encode(src, trgt, encoAttrs);
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
}这是我的具体命令:
package org.hitplay.audio.converters;
public class OggConverter implements IConverter {
private Ogg ogg;
public OggConverter(Ogg ogg){
this.ogg = ogg;
}
@Override
public void convert() {
ogg.convertToOgg();
}
}这是我的扑克课:
public class AudioConverter {
IConverter audio;
public AudioConverter(IConverter audi){
this.audio = audi;
}
public void setAudio(IConverter audio){
this.audio = audio;
}
public void convert(){
audio.convert();
}
}目前,我已经研究了此链接上的命令设计模式,我想知道我是否正确地实现了这个设计模式。如果我没有,请告诉我为什么,以及我如何可以改进这个代码。此外,除了Ogg and OggConverter之外,我还有其他类;我还有Mp3和Mp3Converter。
发布于 2013-01-03 12:49:43
我不认为OggConverter类的原因就像现在这样。
相反,只需将接口IConverter添加到Ogg类中即可。并删除所有其他类,因为只有转发调用。
IConverter converter = OggConverter(Ogg(file1,file2));
如果我们将接口添加到Ogg中
IConverter converter = Ogg(file1,file2);
我也不知道AudioConverter类的原因,除此之外,它还可以将ref存储到IConverter,但是我们可以将这个引用存储在其他地方。
除了改进,还有那些CODEC和FORMAT字符串常量。而不是string,您应该提供枚举。
public enum AudioCodec {
LIBVORBIS;
}
public enum AudioFormat {
OGG("ogg"),
MP3("mp3");
private final String ext;
private AudioFormat(String ext) {
this.ext = ext;
}
public String getExt() {
return this.ext;
}
}https://codereview.stackexchange.com/questions/20114
复制相似问题