91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在JAVA項目中組合模式的實現原理是什么

發布時間:2020-11-30 16:59:16 來源:億速云 閱讀:186 作者:Leah 欄目:編程語言

今天就跟大家聊聊有關在JAVA項目中組合模式的實現原理是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

組合模式:將不同但是相關的對象組合成樹形結構以實現“部分-整體”的層次結構,使得用戶對單個對象和組合對象的使用具有一致性。

* 模式角色組成:

1.Component對象: 是組合中的對象接口,是所有類共有的接口。是用于統一定義整體中的部分。

2.Leaf對象: 整體中的部分,沒有下一級。

3.Composite對象: 用來存儲子部件,在Component接口中實現與部分有關操作。

以公司構成為例,比如公司有總公司,總公司下有分公司,分公司下有辦事處等。構成一個樹形結構。

/**
 * 抽象類:用來管理子類
 * @description:
 * @date 2016-1-22 下午1:16:25
 */
public abstract class Firm {
  private String firmName;// 公司名稱
  public Firm(String firmName) {
    this.firmName = firmName;
  }
  public String getFirmName() {
    return firmName;
  }
  public void setFirmName(String name) {
    this.firmName = name;
  }
  protected abstract void append(Firm firm);// 添加公司如:新增分公司
  protected abstract void romove(Firm firm);// 刪除公司:如因故關閉分公司
  protected abstract void show(int level);//顯示公司所在的層級:總公司,分公司,辦事處等
}
/**
 * 分公司對象
 * @description:
 * @date 2016-1-22 下午1:25:43
 */
public class BranchFirm extends Firm {
  private List<Firm> cList;
  public BranchFirm(String name) {
    super(name);
    cList = new ArrayList<Firm>();
  }
  @Override
  protected void append(Firm firm) {
    cList.add(firm);
  }
  @Override
  protected void show(int depth) {
    StringBuilder sb = new StringBuilder("");
    for (int i = 0; i < depth; i++) {
      sb.append("*");
    }
    System.out.println(new String(sb) + this.getFirmName());
    for (Firm c : cList) {
      c.show(depth + 2);
    }
  }
  @Override
  protected void romove(Firm firm) {
    // TODO Auto-generated method stub
    cList.remove(firm);
  }
}
/**
 * Leaf結點類:公司市場部
 * @description:
 * @date 2016-1-22 下午1:46:02
 */
public class MarketDepartment extends Firm {
  public MarketDepartment(String name) {
    super(name);
  }
  @Override
  protected void append(Firm company) {
  }
  @Override
  protected void show(int depth) {
    // TODO Auto-generated method stub
    StringBuilder sb = new StringBuilder("");
    for (int i = 0; i < depth; i++) {
      sb.append("*");
    }
    System.out.println(new String(sb) + this.getFirmName());
  }
  @Override
  protected void romove(Firm company) {
  }
}
/**
 * Leaf結點類:公司技術部
 * @description:
 * @date 2016-1-22 下午1:21:41
 */
public class MinTechDepartment extends Firm {
  public MinTechDepartment(String name) {
    super(name);
  }
  @Override
  protected void append(Firm firm) {
  }
  @Override
  protected void show(int depth) {
    StringBuilder sb = new StringBuilder("");
    for (int i = 0; i < depth; i++) {
      sb.append("*");
    }
    System.out.println(new String(sb) + this.getFirmName());
  }
  @Override
  protected void romove(Firm company) {
  }
}
public class Test {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    Firm head = new BranchFirm("深圳XX集團有限公司");// 公司總部
    head.append(new MarketDepartment("深圳XX集團有限公司--市場部"));
    head.append(new MinTechDepartment("深圳XX集團有限公司--技術部"));
    Firm jsFirm = new BranchFirm("深圳XX集團有限公司-江蘇分公司");
    jsFirm.append(new MarketDepartment("深圳XX集團有限公司-江蘇分公司市場部"));
    jsFirm.append(new MinTechDepartment("深圳XX集團有限公司-江蘇分公司技術部"));
    Firm szFirm = new BranchFirm("深圳XX集團有限公司-江蘇分公司-蘇州辦事處");
    szFirm.append(new MinTechDepartment("深圳XX集團有限公司-江蘇分公司-蘇州辦事處技術部"));
    szFirm.append(new MarketDepartment("深圳XX集團有限公司-江蘇分公司-蘇州辦事處市場部"));
    jsFirm.append(szFirm);
    // 如果還需要新增分公司或辦事處等,就繼續按照上述操作處理
    head.append(jsFirm);
    head.show(0);
  }
}

看完上述內容,你們對在JAVA項目中組合模式的實現原理是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

岳阳县| 临安市| 垦利县| 临澧县| 巨野县| 肥城市| 土默特右旗| 清丰县| 密云县| 罗平县| 庄河市| 平利县| 蓬安县| 鄂托克旗| 泸西县| 东至县| 五家渠市| 古丈县| 周至县| 东乌珠穆沁旗| 长宁县| 鲁甸县| 聂拉木县| 兴安盟| 汾西县| 清原| 安宁市| 大方县| 丽江市| 临朐县| 荆门市| 黄骅市| 于田县| 秭归县| 鄂伦春自治旗| 高唐县| 元氏县| 眉山市| 梨树县| 改则县| 宁波市|