<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 樹形結構的處理——組合模式(三) 11.3 完整解決方案 為了讓系統具有更好的靈活性和可擴展性,客戶端可以一致地對待文件和文件夾,Sunny公司開發人員使用組合模式來進行殺毒軟件的框架設計,其基本結構如圖11-5所示: ![](http://img.my.csdn.net/uploads/201209/07/1347030143_6150.jpg) 圖11-5 殺毒軟件框架設計結構圖 在圖11-5中, AbstractFile充當抽象構件類,Folder充當容器構件類,ImageFile、TextFile和VideoFile充當葉子構件類。完整代碼如下所示: ``` import java.util.*; //抽象文件類:抽象構件 abstract class AbstractFile { public abstract void add(AbstractFile file); public abstract void remove(AbstractFile file); public abstract AbstractFile getChild(int i); public abstract void killVirus(); } //圖像文件類:葉子構件 class ImageFile extends AbstractFile { private String name; public ImageFile(String name) { this.name = name; } public void add(AbstractFile file) { System.out.println("對不起,不支持該方法!"); } public void remove(AbstractFile file) { System.out.println("對不起,不支持該方法!"); } public AbstractFile getChild(int i) { System.out.println("對不起,不支持該方法!"); return null; } public void killVirus() { //模擬殺毒 System.out.println("----對圖像文件'" + name + "'進行殺毒"); } } //文本文件類:葉子構件 class TextFile extends AbstractFile { private String name; public TextFile(String name) { this.name = name; } public void add(AbstractFile file) { System.out.println("對不起,不支持該方法!"); } public void remove(AbstractFile file) { System.out.println("對不起,不支持該方法!"); } public AbstractFile getChild(int i) { System.out.println("對不起,不支持該方法!"); return null; } public void killVirus() { //模擬殺毒 System.out.println("----對文本文件'" + name + "'進行殺毒"); } } //視頻文件類:葉子構件 class VideoFile extends AbstractFile { private String name; public VideoFile(String name) { this.name = name; } public void add(AbstractFile file) { System.out.println("對不起,不支持該方法!"); } public void remove(AbstractFile file) { System.out.println("對不起,不支持該方法!"); } public AbstractFile getChild(int i) { System.out.println("對不起,不支持該方法!"); return null; } public void killVirus() { //模擬殺毒 System.out.println("----對視頻文件'" + name + "'進行殺毒"); } } //文件夾類:容器構件 class Folder extends AbstractFile { //定義集合fileList,用于存儲AbstractFile類型的成員 private ArrayList<AbstractFile> fileList=new ArrayList<AbstractFile>(); private String name; public Folder(String name) { this.name = name; } public void add(AbstractFile file) { fileList.add(file); } public void remove(AbstractFile file) { fileList.remove(file); } public AbstractFile getChild(int i) { return (AbstractFile)fileList.get(i); } public void killVirus() { System.out.println("****對文件夾'" + name + "'進行殺毒"); //模擬殺毒 //遞歸調用成員構件的killVirus()方法 for(Object obj : fileList) { ((AbstractFile)obj).killVirus(); } } } ``` 編寫如下客戶端測試代碼: ``` 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的資料'進行殺毒 ****對文件夾'圖像文件'進行殺毒 ----對圖像文件'小龍女.jpg'進行殺毒 ----對圖像文件'張無忌.gif'進行殺毒 ****對文件夾'文本文件'進行殺毒 ----對文本文件'九陰真經.txt'進行殺毒 ----對文本文件'葵花寶典.doc'進行殺毒 ****對文件夾'視頻文件'進行殺毒 ----對視頻文件'笑傲江湖.rmvb'進行殺毒 ``` 由于在本實例中使用了組合模式,在抽象構件類中聲明了所有方法,包括用于管理和訪問子構件的方法,如add()方法和remove()方法等,因此在ImageFile等葉子構件類中實現這些方法時必須進行相應的異常處理或錯誤提示。在容器構件類Folder的killVirus()方法中將遞歸調用其成員對象的killVirus()方法,從而實現對整個樹形結構的遍歷。 如果需要更換操作節點,例如只需對文件夾“文本文件”進行殺毒,客戶端代碼只需修改一行即可,將 代碼: ``` folder1.killVirus(); ``` 改為: ``` folder3.killVirus(); ``` 輸出結果如下: ``` ****對文件夾'文本文件'進行殺毒 ----對文本文件'九陰真經.txt'進行殺毒 ----對文本文件'葵花寶典.doc'進行殺毒 ``` 在具體實現時,我們可以創建圖形化界面讓用戶選擇所需操作的根節點,無須修改源代碼,符合“開閉原則”,客戶端無須關心節點的層次結構,可以對所選節點進行統一處理,提高系統的靈活性。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看