您当前的位置: 首页 >  Java

小志的博客

暂无认证

  • 0浏览

    0关注

    1217博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

java设计模式——组合模式

小志的博客 发布时间:2020-07-09 17:18:25 ,浏览量:0

目录
    • 一、组合模式的定义与类型
    • 二、组合模式的适用场景
    • 三、组合模式的优点
    • 四、组合模式的缺点
    • 五、组合模式相关的设计模式
    • 六、组合模式示例

一、组合模式的定义与类型

1、定义

  • 将对象组合成树形结构以表示“部分-整体”的层次结构
  • 组合模式使客户端对单个对象和组合对象保持一致的方式处理
  • 在这里插入图片描述

2、类型

  • 结构型
二、组合模式的适用场景
  • 希望客户端可以忽略组合对象与单个对象的差异时
  • 处理一个树形结构时
三、组合模式的优点
  • 清楚的定义分层次的复杂对象,表示对象的全部或部分层次
  • 让客户端忽略了层次的差异,方便对整个层次结构进行控制
  • 简化客户端代码
  • 符合开闭原则
四、组合模式的缺点
  • 限制类型时会较为复杂
  • 使设计变得更加抽象
五、组合模式相关的设计模式
  • 组合模式和访问者模式
六、组合模式示例

示例描述:以课程和课程组成的课程目录为例。

1、创建一个抽象的目录组件类:

package com.rf.designPatterns.structural.composite;
/**
 * @description: 创建一个抽象的目录组件类
 * @author: xiaozhi
 * @create: 2020-07-09 10:39
 */
public abstract class CatalogComponent {

    public void insert(CatalogComponent catalogComponent){
        throw  new UnsupportedOperationException("不支持添加目录操作");
    }
    public void delete(CatalogComponent catalogComponent){
        throw  new UnsupportedOperationException("不支持删除目录操作");
    }
    public String getName(CatalogComponent catalogComponent){
        throw  new UnsupportedOperationException("不支持获目录名称操作");
    }
    public Double getPrice(CatalogComponent catalogComponent){
        throw  new UnsupportedOperationException("不支持目录价格操作");
    }
    public void print(){
        throw  new UnsupportedOperationException("不支持打印目录操作");
    }
}

2、创建一个课程类

package com.rf.designPatterns.structural.composite;

/**
 * @description: 创建一个课程类
 * @author: xiaozhi
 * @create: 2020-07-09 10:45
 */
public class Cource extends CatalogComponent{
    private String name; //课程名称
    private Double price; //课程价格

    public Cource(String name, Double price) {
        this.name = name;
        this.price = price;
    }

    @Override
    public String getName(CatalogComponent catalogComponent) {
        return this.name;
    }

    @Override
    public Double getPrice(CatalogComponent catalogComponent) {
        return this.price;
    }

    @Override
    public void print() {
        System.out.println("课程的名称:"+name+",价格:"+price);
    }
}

3、创建一个课程目录类

package com.rf.designPatterns.structural.composite;

import java.util.ArrayList;
import java.util.List;

/**
 * @description: 创建一个课程目录类
 * @author: xiaozhi
 * @create: 2020-07-09 10:59
 */
public class CourseCatalog extends CatalogComponent{
    private List list=new ArrayList();
    private String name; //课程目录名称
    private Integer level;课程目录等级
    public CourseCatalog(String name,Integer level) {
        this.name = name;
        this.level=level;
    }

    @Override
    public void insert(CatalogComponent catalogComponent) {
        list.add(catalogComponent);
    }

    @Override
    public void delete(CatalogComponent catalogComponent) {
        list.remove(catalogComponent);
    }

    @Override
    public String getName(CatalogComponent catalogComponent) {
        return this.name;
    }

    @Override
    public void print() {
        System.out.println(this.name);
       for(CatalogComponent item :list){
           if(this.level!=null){
                for(int i=0;i            
关注
打赏
1661269038
查看更多评论
0.0440s