Node-RED中實現選擇照片並轉碼Base64並顯示
阿新 • • 發佈:2022-04-18
(1)案例背景:
在作業系統中,一個資料夾中可能存放著影象檔案,視訊檔案,文字檔案,也可能存放其他的資料夾,而對不同型別的檔案進行的瀏覽操作也不一樣,使用透明組合模式,繪製類圖並程式設計實現檔案的瀏覽(課本197頁第二題)。
(2)實現步驟:
- 根據題意,畫出組合模式的類圖,類圖中應包含抽象檔案類AbstractFile,具體的影象檔案類ImageFile,視訊檔案類VideoFile,文字檔案類TextFile以及資料夾類Folder,對每個檔案都有display()方法,而對資料夾可以進行add()方法和remove()方法。
- 根據類圖,實現上述類的具體程式碼以及使用者類Client,在使用者類中需要將不同型別的檔案放入資料夾中。
- 編譯並執行程式,使程式能夠輸出對檔案的瀏覽過程。
(3)案例總結:
在以下情況可以使用組合模式:
- 在具有整體和部分的層次結構中,希望通過一種方式忽略整體與部分的差異,使客戶端可以一致的對待他們
- 在使用面嚮物件語言開發的系統中需要處理一個樹形結構
- 在一個系統中能夠分離出葉子物件和容器物件,而且他們的型別不固定,需要增加一些新的型別
程式碼結構:
詳細程式碼:
AbstractFile.java:
package File.AbstractFile; public abstract class AbstractFile { public abstractvoid display(); }
ImageFile.java:
package File.ConcreteFlie; import File.AbstractFile.AbstractFile; public class ImageFile extends AbstractFile { public void display(){ System.out.println("瀏覽圖片檔案。"); } }
TextFile.java:
package File.ConcreteFlie;import File.AbstractFile.AbstractFile; public class TextFile extends AbstractFile { public void display(){ System.out.println("瀏覽文字檔案。"); } }
VideoFile.java:
package File.ConcreteFlie; import File.AbstractFile.AbstractFile; public class VideoFile extends AbstractFile { public void display(){ System.out.println("瀏覽視訊檔案。"); } }
Folder.java:
package File.ConcreteFlie; import File.AbstractFile.AbstractFile; import java.util.ArrayList; public class Folder extends AbstractFile { private ArrayList arrayList = new ArrayList(); public void add(AbstractFile abstractFile){ arrayList.add(abstractFile); } public void remove(AbstractFile abstractFile){ arrayList.remove(abstractFile); } public void display(){ for (Object object:arrayList){ ((AbstractFile) object).display(); } } }
Client.java:
package File.Client; import File.AbstractFile.AbstractFile; import File.ConcreteFlie.Folder; import File.ConcreteFlie.ImageFile; import File.ConcreteFlie.TextFile; import File.ConcreteFlie.VideoFile; public class Client { public static void main(String[] args) { System.out.println("詳細設計實驗報告 1904班白旭君 2019005368"); AbstractFile obj1,obj2,obj3,obj4,obj5,obj6; Folder f1,f2,f3; obj1 = new ImageFile(); obj2 = new TextFile(); obj3 = new VideoFile(); f1 = new Folder(); f1.add(obj1); f1.add(obj2); f1.add(obj3); obj4 = new ImageFile(); obj5 = new ImageFile(); f2 = new Folder(); f2.add(obj4); f2.add(obj5); obj6 = new VideoFile(); f3 = new Folder(); f3.add(f1); f3.add(f2); f3.add(obj6); f3.display(); } }
實驗結果: