(四)FFT在時序資料上的應用
阿新 • • 發佈:2020-10-20
定義:又稱為部分-整體模式,它是一種將物件組合成樹狀的層次結構的模式,用來表示”部分-整體“的關係,使使用者對當個物件和組合物件具有一致的訪問性
優點:
1,組合模式使得客戶端程式碼可以一致地處理單個物件和組合物件,無需擔心自己處理的是單個物件,還是組合物件,這簡化了客戶端程式碼
2,更容易在組合體內加入新的物件,客戶端不會因為加入了新的物件而更改原始碼,滿足”開閉原則“
缺點
1,設計比較複雜,客戶需要花費更多時間清理類之間的層次關係。
2,不容易限制容器的構件。
3,不容易使用繼承的關係來增加構件的新功能。
模式的結構
1,抽象構件角色:它主要是為樹葉構件和樹枝構件宣告公共介面,並實現他們的預設行為,在透明的組合模式中抽象構件還宣告訪問和管理子類的介面;在安全式的組合模式中不宣告訪問和管理子類的介面,管理工作由樹枝工作完成。
2,樹葉構件角色:是組合中的葉節點物件,它沒有子節點,用於構件角色中宣告的公共介面
3,樹枝構件角色:是組合中的分支節點物件,它有子節點,它實現了抽象構件角色中的宣告介面,它的主要作用是儲存和管理子部件,通常包含add(),remove(),getchildren()等方法
組合模式分為透明模式和安全模式
透明模式:在該方式中,由於抽象構件聲明瞭所有子類中的全部方法,所以客服端無需區別樹葉物件和樹枝物件,對客戶端來說是透明的,缺點是樹葉構件本來沒有Add(),Remove(),GetChild()方法,卻要實現它們,這樣會帶來一些安全性問題
安全模式:在該方式中,將管理子構件的方法移到樹枝構件中,抽象構件和樹葉構件沒有對子物件的管理方法,這樣就避免了上一種方式的安全性問題,但由於葉子和分支有不同的介面,客戶端在呼叫時要知道樹葉物件的存在,所以失去了透明性
程式碼
package composite; import java.util.ArrayList; public class CompositePattern { public static void main(String[] args) { Component c0=new Composite(); Component c1=new Composite(); Component leaf1=new Leaf("1"); Component leaf2=new Leaf("2"); Component leaf3=new Leaf("3"); c0.add(leaf1); c0.add(c1); c1.add(leaf2); c1.add(leaf3); c0.operation(); } } //抽象構件 interface Component { public void add(Component c); public void remove(Component c); public Component getChild(int i); public void operation(); } //樹葉構件 class Leaf implements Component { private String name; public Leaf(String name) { this.name=name; } public void add(Component c){ } public void remove(Component c){ } public Component getChild(int i) { return null; } public void operation() { System.out.println("樹葉"+name+":被訪問!"); } } //樹枝構件 class Composite implements Component { private ArrayList<Component> children=new ArrayList<Component>(); public void add(Component c) { children.add(c); } public void remove(Component c) { children.remove(c); } public Component getChild(int i) { return children.get(i); } public void operation() { for(Object obj:children) { ((Component)obj).operation(); } } }