11.3 完整解決方案
爲了讓系統具備更好的靈活性和可擴展性,客戶端能夠一致地對待文件和文件夾,Sunny公司開發人員使用組合模式來進行殺毒軟件的框架設計,其基本結構如圖11-5所示:java

圖11-5 殺毒軟件框架設計結構圖編程
在圖11-5中, AbstractFile充當抽象構件類,Folder充當容器構件類,ImageFile、TextFile和VideoFile充當葉子構件類。完整代碼以下所示:框架
編寫以下客戶端測試代碼:ide
- class Client {
- public static void main(String args[]) {
- //針對抽象構件編程
- AbstractFile file1,file2,file3,file4,file5,folder1,folder2,folder3,folder4;
-
- folder1 = new Folder("Sunny的資料");
- folder2 = new Folder("圖像文件");
- folder3 = new Folder("文本文件");
- folder4 = new Folder("視頻文件");
-
- file1 = new ImageFile("小龍女.jpg");
- file2 = new ImageFile("張無忌.gif");
- file3 = new TextFile("九陰真經.txt");
- file4 = new TextFile("葵花寶典.doc");
- file5 = new VideoFile("笑傲江湖.rmvb");
-
- folder2.add(file1);
- folder2.add(file2);
- folder3.add(file3);
- folder3.add(file4);
- folder4.add(file5);
- folder1.add(folder2);
- folder1.add(folder3);
- folder1.add(folder4);
-
- //從「Sunny的資料」節點開始進行殺毒操做
- folder1.killVirus();
- }
- }
編譯並運行程序,輸出結果以下:測試
****對文件夾'Sunny的資料'進行殺毒this ****對文件夾'圖像文件'進行殺毒spa ----對圖像文件'小龍女.jpg'進行殺毒.net ----對圖像文件'張無忌.gif'進行殺毒設計 ****對文件夾'文本文件'進行殺毒視頻 ----對文本文件'九陰真經.txt'進行殺毒 ----對文本文件'葵花寶典.doc'進行殺毒 ****對文件夾'視頻文件'進行殺毒 ----對視頻文件'笑傲江湖.rmvb'進行殺毒 |
因爲在本實例中使用了組合模式,在抽象構件類中聲明瞭全部方法,包括用於管理和訪問子構件的方法,如add()方法和remove()方法等,所以在ImageFile等葉子構件類中實現這些方法時必須進行相應的異常處理或錯誤提示。在容器構件類Folder的killVirus()方法中將遞歸調用其成員對象的killVirus()方法,從而實現對整個樹形結構的遍歷。
若是須要更換操做節點,例如只需對文件夾「文本文件」進行殺毒,客戶端代碼只需修改一行便可,將代碼:
改成:
輸出結果以下:
****對文件夾'文本文件'進行殺毒 ----對文本文件'九陰真經.txt'進行殺毒 ----對文本文件'葵花寶典.doc'進行殺毒 |
在具體實現時,咱們能夠建立圖形化界面讓用戶選擇所需操做的根節點,無須修改源代碼,符合「開閉原則」,客戶端無須關心節點的層次結構,能夠對所選節點進行統一處理,提升系統的靈活性。
【做者:劉偉 http://blog.csdn.net/lovelion】