全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

JAVA设计模式之组合模式原理与用法详解

本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。


# JAVA  # 设计模式  # 组合模式  # Java设计模式中的组合模式  # Java设计模式之组合模式深入刨析  # Java设计模式之组合模式的示例详解  # 深入理解Java设计模式之组合模式  # Java设计模式之java组合模式详解  # java设计模式-组合模式详解  # 分析Java设计模式之组合模式  # 快速理解Java设计模式中的组合模式  # Java结构型设计模式之组合模式详解  # 深圳  # 苏州  # 下午  # 操作技巧  # 有一  # 相关内容  # 子类  # 感兴趣  # 数据结构  # 公司名称  # 给大家  # 还需要  # 为例  # 一地  # 所述  # 程序设计  # 抽象类  # 讲述了  # date  # description 


相关文章: 专业公司网站制作公司,用什么语言做企业网站比较好?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  英语简历制作免费网站推荐,如何将简历翻译成英文?  一键网站制作软件,义乌购一件代发流程?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  历史网站制作软件,华为如何找回被删除的网站?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  成都网站制作报价公司,成都工业用气开户费用?  如何快速搭建高效简练网站?  建站主机类型有哪些?如何正确选型  C#如何在一个XML文件中查找并替换文本内容  建站之星在线客服如何快速接入解答?  如何用VPS主机快速搭建个人网站?  建站ABC备案流程中有哪些关键注意事项?  企业微网站怎么做,公司网站和公众号有什么区别?  高端企业智能建站程序:SEO优化与响应式模板定制开发  平台云上自助建站如何快速打造专业网站?  c# 服务器GC和工作站GC的区别和设置  定制建站流程步骤详解:一站式方案设计与开发指南  如何通过cPanel快速搭建网站?  建站之星如何配置系统实现高效建站?  javascript中对象的定义、使用以及对象和原型链操作小结  如何在云服务器上快速搭建个人网站?  整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?  制作网站的过程怎么写,用凡科建站如何制作自己的网站?  云南网站制作公司有哪些,云南最好的招聘网站是哪个?  网站制作企业,网站的banner和导航栏是指什么?  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  如何在腾讯云服务器上快速搭建个人网站?  魔毅自助建站系统:模板定制与SEO优化一键生成指南  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  python的本地网站制作,如何创建本地站点?  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?  网站制作公司排行榜,四大门户网站排名?  如何选择建站程序?包含哪些必备功能与类型?  如何打造高效商业网站?建站目的决定转化率  Swift中循环语句中的转移语句 break 和 continue  如何通过多用户协作模板快速搭建高效企业网站?  名字制作网站免费,所有小说网站的名字?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  深圳 网站制作,深圳招聘网站哪个比较好一点啊?  如何用IIS7快速搭建并优化网站站点?  制作旅游网站html,怎样注册旅游网站?  如何快速生成凡客建站的专业级图册?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  建站之星导航菜单设置与功能模块配置全攻略  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。