30秒到達(dá)戰(zhàn)場
2019-08-16 14:09:37
將許多“if else”語句轉(zhuǎn)換為更清晰的方法我的代碼在這里檢測是否mimeType等于某種MIME類型,如果是,它將進(jìn)行某種轉(zhuǎn)換public void convertToMp3(File src, File target,String mimeType){
if(mimeType.equals("audio/mpeg")){
...
}else if(mimeType.equals("audio/wav")){
mp3ToWav();
}else if(mimeType.equals("audio/ogg")){
...
}else if(...){
... //More if and else here}我縮短了我的代碼,因?yàn)樗泻芏嗥渌鹖f語句,什么設(shè)計(jì)模式適合刪除許多if和else或if語句?
3 回答

德瑪西亞99
TA貢獻(xiàn)1770條經(jīng)驗(yàn) 獲得超3個(gè)贊
你可以有一個(gè)Converter
界面。然后你可以為每個(gè)Mimetype創(chuàng)建一個(gè)類,如:
public interface Converter { public void convertToMp3(); public void convertToOgg();}public class MpegConverter implements Converter { public void convertToMp3() { //Code here } public void convertToOgg() { //Code here }}
對于每個(gè)轉(zhuǎn)換器,您都需要這樣的類。然后你可以設(shè)置這樣的地圖:
Map<String, Converter> mimeTypeMap = new HashMap<String, Converter>();mimeTypeMap.put("audio/mpeg", new MpegConverter());
然后你的convertToMp3
方法變成這樣:
Converter converter = mimeTypeMap.get(mimeType);converter.convertToMp3();
使用這種方法,您可以在將來輕松添加不同的轉(zhuǎn)換器。
所有未經(jīng)測試的,可能都沒有編譯,但你明白了

慕田峪9158850
TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊
考慮使用策略設(shè)計(jì)模式和a Map
調(diào)度到適當(dāng)?shù)牟呗浴H绻阈枰~外的功能,除了特定mimeType
的轉(zhuǎn)換,或轉(zhuǎn)換器是大而復(fù)雜的代碼,你會(huì)希望將每個(gè)轉(zhuǎn)換器放在自己的.java
文件中。
interface Convertor { void convert(File src, File target); } private static void convertWav(File src, File target) { ... } ... private static final Map< String, Convertor > convertors = new ...; static { convertors.put("audio/wav", new Convertor { void convert(File src, File target) { convertWav(src, target); } }); convertors.put("audio/ogg", new Convertor { void convert(File src, File target) { convertOgg(src, target); } }); ... } public void convertToMp3(File src, File target, String mimeType){ final Convertor convertor = convertors.get(mimeType); if (convertor == null ) { ... } else { convertor.convert(src, target); } }
添加回答
舉報(bào)
0/150
提交
取消