定义:将对象组合成树形结构以表示  部分--整体的层次结构

组合模式使客户端对单个对象和组合对象保持一致的方式处理

类型:结构型

优点:

1.清楚地定义分层次的复杂对象,表示对象的全部去或部分层次

2.让客户端忽略了层次的差异,方便对整个层次结构进行控制

3.简化客户端代码

4.符合开闭原则

  1. public abstract class CatalogComponent {
  2. public void add(CatalogComponent catalogComponent){
  3. throw new UnsupportedOperationException("不支持添加操作");
  4. }
  5. public void remove(CatalogComponent catalogComponent){
  6. throw new UnsupportedOperationException("不支持删除操作");
  7. }
  8. public String getName(CatalogComponent catalogComponent){
  9. throw new UnsupportedOperationException("不支持获取名称操作");
  10. }
  11. public double getPrice(CatalogComponent catalogComponent){
  12. throw new UnsupportedOperationException("不支持获取价格操作");
  13. }
  14. public void print(){
  15. throw new UnsupportedOperationException("不支持打印操作");
  16. }
  17. }

  

  1. public class Course extends CatalogComponent {
  2. private String name;
  3. private double price;
  4.  
  5. public Course(String name, double price) {
  6. this.name = name;
  7. this.price = price;
  8. }
  9.  
  10. @Override
  11. public String getName(CatalogComponent catalogComponent) {
  12. return this.name;
  13. }
  14.  
  15. @Override
  16. public double getPrice(CatalogComponent catalogComponent) {
  17. return this.price;
  18.  
  19. }
  20.  
  21. @Override
  22. public void print() {
  23. System.out.println("Course Name:"+name+" price:"+price);
  24. }
  25. }

  

  1. public class CourseCatalog extends CatalogComponent{
  2. private List<CatalogComponent> items=new ArrayList<CatalogComponent>();
  3. private String name;
  4. private Integer level;
  5.  
  6. public CourseCatalog(String name,Integer level) {
  7. this.name = name;
  8. this.level=level;
  9. }
  10.  
  11. @Override
  12. public void add(CatalogComponent catalogComponent) {
  13. items.add(catalogComponent);
  14. }
  15.  
  16. @Override
  17. public void remove(CatalogComponent catalogComponent) {
  18. items.remove(catalogComponent);
  19. }
  20.  
  21. @Override
  22. public void print() {
  23. System.out.println(this.name);
  24. for(CatalogComponent catalogComponent:items){
  25. if(this.level!=null){
  26. for(int i=0;i<this.level;i++){
  27. System.out.println(" ");
  28. }
  29. }
  30. catalogComponent.print();
  31. }
  32. }
  33. }

  

Java组合模式的更多相关文章

  1. Java组合模式(思维导图)

    图1 组合模式[点击查看图片] 1,以公司职员为例的结构 package com.cnblogs.mufasa.demo3; import java.util.ArrayList; import ja ...

  2. 设计模式总结篇系列:组合模式(Composite)

    在探讨Java组合模式之前,先要明白几个概念的区别:继承.组合和聚合. 继承是is-a的关系.组合和聚合有点像,有些书上没有作区分,都称之为has-a,有些书上对其进行了较为严格区分,组合是conta ...

  3. java设计模式之组合模式

    组合模式 组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性.掌握组合模式的重点是要理解清楚 “部分/整体” 还有 ”单个对象“ 与 & ...

  4. JAVA 设计模式 组合模式

    用途 组合模式 (Component) 将对象组合成树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有唯一性. 组合模式是一种结构型模式. 结构

  5. Java设计模式——组合模式

    JAVA 设计模式 组合模式 用途 组合模式 (Component) 将对象组合成树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有唯一性. 组合模式是一种结构型模 ...

  6. java实现Composite(组合)模式

    组合模式涉及的是一组对象,其中一些对象可能含有其他对象,这些对象也可以含有对象,因此,有些对象代表的是对象群组. Composite模式的设计意图在于:让所有的用户能够用统一的接口处理单个对象以及对象 ...

  7. java设计模式--结构型模式--组合模式

    什么是组合模式,这个有待研究,个人觉得是各类组合而形成的一种结构吧. 组合模式: 组合模式 概述 将对象组合成树形结构以表示"部分-整体"的层次结构."Composite ...

  8. Java设计模式之《组合模式》及应用场景

    摘要: 原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/6489827.html 组合模式,就是在一个对象中包含其他对象,这些被包含的对象可能是 ...

  9. 设计模式之组合模式——Java语言描述

    组合模式又叫做部分整体模式,适用于把一组相似的对象当作一个单一的对象.组合模式依据树形结构来组合对象,用来表示部分以及整体层次 介绍 意图 将对象组合成树形结构以表示"部分-整体" ...

随机推荐

  1. ASP.NET MVC系列:web.config中ConnectionString aspnet_iis加密与AppSettings独立文件

    1. web.config中ConnectionString aspnet_iis加密 web.config路径:E:\Projects\Libing.Web\web.config <conne ...

  2. JVM运行时内存组成分为一些线程私

    JVM运行时内存组成分为一些线程私有的,其他的是线程共享的. 线程私有 程序计数器:当前线程所执行的字节码的行号指示器. Java虚拟机栈:java方法执行的内存模型,每个方法被执行时都会创建一个栈帧 ...

  3. centos7 LNMP

    Nginx1.13.5 + PHP7.1.10 + MySQL5.7.19 一.安装Nginx 1.安装依赖扩展 # yum -y install wget openssl* gcc gcc-c++ ...

  4. 题解-洛谷P1981 表达式求值(模拟+处理优先级的递归)

    https://www.luogu.org/problemnew/show/P1981 (原题链接) 显然乘法的优先级高与加法,因此碰到乘号就要优先把一连串与乘号相连的数算出,很容易想到递归.可用普通 ...

  5. Day039--HTML

    HTML小马哥博客 HTML CSS + DIV实现整体布局 1. HTML 超文本标记语言 对换行不敏感 空白折叠现象 标签要严格密封 新建HTML文件,输入 html:5,按tab键后,自动生成的 ...

  6. bootstrap学习: 折叠插件和面板

    bootstrap提供了面板排版工具和折叠插件,能够用来实现新闻列表.留言板.博客分块等: 1.折叠插件: <a data-toggle="collapse" data-ta ...

  7. Vue的指令系统、计算属性和表单输入绑定

    指令系统 指令 (Directives) 是带有 v- 前缀的特殊特性.指令特性的值预期是单个 JavaScript 表达式 (v-for 是例外情况,稍后我们再讨论).指令的职责是,当表达式的值改变 ...

  8. Redis(REmote DIctionary Server)基础

    Redis(REmote DIctionary Server)基础 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Redis是一个开放源代码(BSD许可)的内存数据结构存储,用作数 ...

  9. I/O模型之一:Unix的五种I/O模型

    目录: <I/O模型之一:Unix的五种I/O模型> <I/O模型之二:Linux IO模式及 select.poll.epoll详解> <I/O模型之三:两种高性能 I ...

  10. Fiddler--Filters

    本篇主要介绍Fiddler中Filters(过滤器)选项功能. 先看看Filters的界面: 一.模块一 当勾选“Use Filters”,Filters才开始工作:否则Filters中的设置内容将无 ...