全网整合营销服务商

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

免费咨询热线: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 


相关文章: 企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  如何快速搭建二级域名独立网站?  家具网站制作软件,家具厂怎么跑业务?  建站主机与服务器功能差异如何区分?  ,交易猫的商品怎么发布到网站上去?  武清网站制作公司,天津武清个人营业执照注销查询系统网站?  如何高效利用200m空间完成建站?  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  建站之星免费模板:自助建站系统与智能响应式一键生成  临沂网站制作公司有哪些,临沂第四中学官网?  如何快速查询网站的真实建站时间?  如何在景安云服务器上绑定域名并配置虚拟主机?  如何解决ASP生成WAP建站中文乱码问题?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  重庆市网站制作公司,重庆招聘网站哪个好?  浅谈Javascript中的Label语句  兔展官网 在线制作,怎样制作微信请帖?  如何快速搭建高效简练网站?  如何在IIS7中新建站点?详细步骤解析  如何在Golang中使用replace替换模块_指定本地或远程路径  如何在服务器上三步完成建站并提升流量?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  网站设计制作公司地址,网站建设比较好的公司都有哪些?  如何选择高效响应式自助建站源码系统?  枣阳网站制作,阳新火车站打的到仙岛湖多少钱?  代刷网站制作软件,别人代刷火车票靠谱吗?  微信小程序 五星评分(包括半颗星评分)实例代码  潮流网站制作头像软件下载,适合母子的网名有哪些?  深圳 网站制作,深圳招聘网站哪个比较好一点啊?  如何在阿里云高效完成企业建站全流程?  合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  建站之星如何通过成品分离优化网站效率?  表情包在线制作网站免费,表情包怎么弄?  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  如何高效配置香港服务器实现快速建站?  建站之星导航配置指南:自助建站与SEO优化全解析  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  简易网站制作视频教程,使用记事本编写一个简单的网页html文件?  如何使用Golang table-driven基准测试_多组数据测量函数效率  广州营销型建站服务商推荐:技术优势与SEO优化解析  黑客如何通过漏洞一步步攻陷网站服务器?  c# 在高并发场景下,委托和接口调用的性能对比  家庭服务器如何搭建个人网站?  如何配置支付宝与微信支付功能? 

您的项目需求

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