全网整合营销服务商

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

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


相关文章: Android滚轮选择时间控件使用详解  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  如何零基础开发自助建站系统?完整教程解析  长沙企业网站制作哪家好,长沙水业集团官方网站?  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  建站之星后台密码如何安全设置与找回?  学校建站服务器如何选型才能满足性能需求?  如何实现建站之星域名转发设置?  教程网站设计制作软件,怎么创建自己的一个网站?  我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?  深圳网站制作培训,深圳哪些招聘网站比较好?  如何撰写建站申请书?关键要点有哪些?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  网站好制作吗知乎,网站开发好学吗?有什么技巧?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  网站制作网站,深圳做网站哪家比较好?  清除minerd进程的简单方法  高端建站三要素:定制模板、企业官网与响应式设计优化  如何自定义建站之星模板颜色并下载新样式?  浅谈Javascript中的Label语句  建站之星如何一键生成手机站?  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成  网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?  h5网站制作工具有哪些,h5页面制作工具有哪些?  详解jQuery停止动画——stop()方法的使用  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  简易网站制作视频教程,使用记事本编写一个简单的网页html文件?  如何在阿里云香港服务器快速搭建网站?  相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?  建站之星官网登录失败?如何快速解决?  如何制作算命网站,怎么注册算命网站?  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  常州企业网站制作公司,全国继续教育网怎么登录?  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  如何在搬瓦工VPS快速搭建网站?  如何快速建站并高效导出源代码?  如何配置IIS站点权限与局域网访问?  建站之星如何通过成品分离优化网站效率?  网站制作报价单模板图片,小松挖机官方网站报价?  网站制作企业,网站的banner和导航栏是指什么?  电商网站制作价格怎么算,网上拍卖流程以及规则?  实例解析Array和String方法  北京的网站制作公司有哪些,哪个视频网站最好?  上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?  C#怎么创建控制台应用 C# Console App项目创建方法  建站之星如何快速解决建站难题?  建站之星如何配置系统实现高效建站?  如何在建站之星网店版论坛获取技术支持?  如何续费美橙建站之星域名及服务? 

您的项目需求

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