<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                **定義**:將對象組合成樹形結構以表示“部分-整體”的層次結構,使得用戶對單個對象和組合對象的使用具有一致性。 ## 一般模式: ![](https://box.kancloud.cn/2016-06-06_5755340b878be.jpg) Component抽象構件角色 --|定義參與組合對象的共有方法和屬性,可以定義一些默認的行為或屬性。 Leaf葉子構件 --|葉子對象,其下再也沒有其他的分支,也是遍歷的最小單位。 Composite樹枝構件 --|樹枝對象,他的作用是組合樹枝節點和葉子節點形成一個樹形結構。 ~~~ public class CompositeTest { public static void main(String[] args) { //創建一個根節點 Composite root = new Composite(); root.doSomething(); //創建一個分支 Composite branch = new Composite(); //創建一個葉子節點 Leaf leaf = new Leaf(); //添加分支 root.add(branch); //添加葉子 branch.add(leaf); branch.add(leaf); branch.add(leaf); //遍歷所有節點 display(root); } /** * 從上到下遍歷,所有節點 * @param root */ public static void display(Composite root){ for(Component c : root.getChildren()){ if(c instanceof Leaf){ //如果是葉子節點,就是從 c.doSomething(); }else{ //遞歸調用 display((Composite)c); } } } } abstract class Component{ //抽象構件,參與組合構架的共有方法和屬性 public void doSomething(){ System.out.println("執行共有的業務邏輯..."); } } /** * 樹枝構件,組合樹枝節點和葉子節點,形成一個樹形結構 * @author admin * */ class Composite extends Component{ //構件容器 private ArrayList<Component> componentList = new ArrayList<Component>(); //增加一個葉子節點或樹枝節點 public void add(Component component){ this.componentList.add(component); } //刪除一個葉子節點或樹枝節點 public void remove(Component component){ this.componentList.remove(component); } //遍歷所有的節點 public ArrayList<Component> getChildren(){ return this.componentList; } } /** * 葉子節點,沒有任何的分支 * @author admin * */ class Leaf extends Component{ //重寫父類的方法 @Override public void doSomething() { // TODO Auto-generated method stub System.out.println("葉子節點,執行方法...."); } } ~~~ ## 一個例子: 如圖是公司員工的樹形圖,要求可以動態的添加員工和部門經理等。并且遍歷輸出。 1、抽取共有方法和屬性作為抽象構件Corp。 2、定義樹枝節點,提供添加節點方法和獲取所有節點的方法CompanyBranch 3、定義葉子節點。CompanyLeaf ![](https://box.kancloud.cn/2016-06-06_5755340ba2c58.jpg) UML類圖 ![](https://box.kancloud.cn/2016-06-06_5755340bbbc6c.jpg) ~~~ public class CompositeT { public static void main(String[] args) { CompanyBranch CEO = getBranch(); System.out.println(CEO.getInfo()); System.out.println(display(CEO)); } public static CompanyBranch getBranch(){ //添加一個ceo CompanyBranch CEO = new CompanyBranch("wb", "ceo", 10); //添加一個財務經理 CompanyBranch FD = new CompanyBranch("xy", "財務經理", 10); //添加一個銷售經理 CompanyBranch XS = new CompanyBranch("ll", "銷售經理", 10); //添加一個技術總監 CompanyBranch CTO = new CompanyBranch("lzl", "技術總監", 10); //添加財務人員 CompanyLeaf a = new CompanyLeaf("小A", "財務人員", 10); //添加銷售組長 CompanyBranch b = new CompanyBranch("小B", "銷售組長", 10); //添加銷售組員 CompanyLeaf c = new CompanyLeaf("小C", "銷售組員", 10); //添加銷售組員 CompanyLeaf e = new CompanyLeaf("小e", "銷售組員", 10); //添加技術組長 CompanyBranch f = new CompanyBranch("小f", "A項目組長", 10); //添加技術組長 CompanyBranch g = new CompanyBranch("小g", "B項目組長", 10); //項目組員 CompanyLeaf h = new CompanyLeaf("小h", "項目A組員", 10); CompanyLeaf i = new CompanyLeaf("小i", "項目A組員", 10); CompanyLeaf j = new CompanyLeaf("小j", "項目A組員", 10); CompanyLeaf k = new CompanyLeaf("小k", "項目B組員", 10); CompanyLeaf l = new CompanyLeaf("小l", "項目B組員", 10); CompanyLeaf m = new CompanyLeaf("小m", "項目B組員", 10); //經理小秘 CompanyLeaf n = new CompanyLeaf("小花", "經理秘書", 10); //ceo下面是三大經理 CEO.addCorp(FD); CEO.addCorp(CTO); CEO.addCorp(XS); CEO.addCorp(n); //財務經理的手下 FD.addCorp(a); //銷售經理的手下 XS.addCorp(b); //銷售組長的手下 b.addCorp(c); b.addCorp(e); //CTO的手下 CTO.addCorp(f); CTO.addCorp(g); //項目組長的手下 f.addCorp(h); f.addCorp(i); f.addCorp(j); g.addCorp(k); g.addCorp(l); g.addCorp(m); return CEO; } public static String display(CompanyBranch corp){ String info = ""; for(Corp c : corp.getChildren()){ if(c instanceof CompanyLeaf){ info = info + c.getInfo(); }else{ info = info + c.getInfo()+display((CompanyBranch)c); } } return info; } } /** * 抽象構件,提取共有方法和屬性。 * @author admin * */ abstract class Corp{ //每個員工都有姓名,薪水,職稱 private String name; private double salary; private String position; public Corp(String name,String position,double salary) { this.name = name; this.position = position; this.salary = salary; } public String getInfo(){ return "姓名:"+this.name+"\t 職稱:"+this.position+"\t薪水:"+this.salary+"\n"; } } /** * 樹枝構件,提供添加分支的方法和獲取所有節點的方法。 * @author admin * */ class CompanyBranch extends Corp{ //必須有一個私有集合存儲 private ArrayList<Corp> corpList= new ArrayList<Corp>(); public CompanyBranch(String name, String position, double salary) { super(name, position, salary); } //添加分支,樹枝節點或者葉子節點 public void addCorp(Corp corp){ this.corpList.add(corp); } //獲取集合。 public ArrayList<Corp> getChildren(){ return this.corpList; } } /** * 葉子節點,沒有任何分支。 * @author admin * */ class CompanyLeaf extends Corp{ public CompanyLeaf(String name, String position, double salary) { super(name, position, salary); } } ~~~ 組合模式不太理解,只能暫時這么總結了。。
                  <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>

                              哎呀哎呀视频在线观看