Android 文本比较 APP,一个android文本比对APP的实现(三)-设计模式在文件选择模块中的运用...
用慣了windows, 當發覺android沒有原生的文件管理器或類似模塊的時候,感覺非常不合理。android sdk似乎也沒有提供類似的組件以讓程序調用,沒辦法,也就只好自己動手做。當然,我也不是從頭開始,網上有很多朋友已經做過了,我拿過來改改,順便加了點自己的東西。先把實現的效果顯示一下:
具體實現大家可以看:http://blog.csdn.net/trbbadboy/article/details/7899424
我使用該朋友的代碼時,利用設計模式對原有設計做了改進,在實現文件選擇器時,一個問題在于文件的圖標如何顯示,在原有設計中,文件與圖標的對應關系是寫死的,偽碼如下:
if (fileExtension == "wav") {
setIcon("wav.png");
}
if (fileExtension == "txt") {
setIcon("txt.png");
}
.......
這種方法有一個問題,由于實際運用中,文件種類太多,這樣,代碼中將會有大量的if else 結構,這樣的代碼結構導致的問題是無法擴展,當有新的文件類型時,需要改動代碼,增加if else分支,當某種文件圖標由于升級而改變后,代碼需要在眾多if else 中找到相應的位置并改動,因此這種代碼模式是難以適應需求變化的,無法達到面向對象的設計中,open for extension, closed for modification 的標準,處理這種情況,最好的方法就是運用設計模式中的責任鏈模式。
為了重構 上述代碼,我們先定義一個接口,文件選擇器要獲取文件圖標時,調用接口,這樣,圖標的獲取就和文件選擇器的邏輯實現解耦合了:
public interface FileIconManager {
int getIconByExtension(String extension);
}
接著我們將上面的if 實現分別封裝到具體的類中,例如,獲取二進制文件的圖標,我們這么實現:
public class BinaryFileIcon implements FileIconManager{
public int getIconByExtension(String extension)
{
return R.drawable.binary;
}
}
獲取wav文件圖標,我們這么實現:
public class WavFileIcon extends BinaryFileIcon{
private String wavExtension = "wav";
public int getIconByExtension(String extension)
{
if (extension == wavExtension)
{
return R.drawable.wavfile;
}
else
{
return super.getIconByExtension(extension);
}
}
}
大家可以發現,如果當前文件的后綴與具體實現類中的需求不一樣,那么就把這個請求提交給他的父類,這就相當于原來代碼中,一個if不滿足,接著判斷下一個if. 于是子類和父類構成了一個處理鏈條。這么做好處比原來一對if else要好很多,一是容易擴張,如果需要添加新的圖標,例如需要再添加一個vod后綴的圖標,我們只要再重新實現一個類,然后將該類繼承于WavFileIcon即可。二是容易更改,當我們要修改某個圖標時,只要找到相應的圖標類進行修改,而不用影響其他圖標的獲取代碼,保證修改不影響程序的質量。
具體代碼的實現,大家可以下載程序代碼看看,希望大家多給予批評和指導
總結
以上是生活随笔為你收集整理的Android 文本比较 APP,一个android文本比对APP的实现(三)-设计模式在文件选择模块中的运用...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 项目管理知识点归纳
- 下一篇: python迭代器和生成器的作用_pyt