【设计模式】组合模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )(二)

简介: 【设计模式】组合模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )(二)

2、书籍类


书籍类 重写了 CatalogComponent 的 getName / getPrice / printf 方法 , 如果调用其余方法 , 会抛出异常 ;


package composite;
/**
 * 书籍类
 *      重写了 CatalogComponent 的 getName / getPrice / printf 方法
 *      如果调用其余方法 , 会抛出异常
 */
public class Book extends CatalogComponent {
    /**
     * 书籍名称
     */
    private String name;
    /**
     * 书籍价格
     */
    private double price;
    public Book(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 printf() {
        System.out.println("Book : name = " + name + " , price = " + price);
    }
}



3、目录类


目录类 重写了 CatalogComponent 的 getName / add / remove / printf 方法 , 如果调用其余方法 , 会抛出异常 ;


package composite;
import java.util.ArrayList;
/**
 * 目录类
 *      重写了 CatalogComponent 的 getName / add / remove / printf 方法
 *      如果调用其余方法 , 会抛出异常
 */
public class Catalogue extends CatalogComponent {
    /**
     * 维护书籍列表
     */
    private ArrayList<CatalogComponent> items = new ArrayList<>();
    /**
     * 书籍名称
     */
    private String name;
    /**
     * 存储当前目录的层数
     *      最外面的是 0 层
     */
    private Integer level;
    public Catalogue(String name, Integer level) {
        this.name = name;
        this.level = level;
    }
    @Override
    public String getName(CatalogComponent catalogComponent) {
        return this.name;
    }
    @Override
    public void add(CatalogComponent catalogComponent) {
        items.add(catalogComponent);
    }
    @Override
    public void remove(CatalogComponent catalogComponent) {
        items.remove(catalogComponent);
    }
    @Override
    public void printf() {
        System.out.println(this.name + " : ");
        for (CatalogComponent catalogComponent : items) {
            // 这样可以将目录层次完整的打印出来
            if (this.level != null) {
                for (int i = 0; i < level; i++) {
                    System.out.print("  ");
                }
            }
            catalogComponent.printf();
        }
    }
}



4、测试类


package composite;
public class Main {
    public static void main(String[] args) {
        // 认为 书籍 和 目录 都是 CatalogComponent 类型的
        CatalogComponent storyBook = new Book("故事书", 2.0);
        CatalogComponent novelBook = new Book("小说", 8.0);
        CatalogComponent mathBook = new Book("数学书", 7.0);
        CatalogComponent englishBook = new Book("英语书", 3.0);
        CatalogComponent schoolBooks = new Catalogue("学校课本", 2);
        schoolBooks.add(mathBook);
        schoolBooks.add(englishBook);
        // 主目录 , 包含上述所有内容 , 2 本书 和 1 个目录
        CatalogComponent main = new Catalogue("所有书籍", 1);
        main.add(storyBook);
        main.add(novelBook);
        main.add(schoolBooks);
        // 打印主目录
        main.printf();
    }
}


执行结果 :


所有书籍 : 
  Book : name = 故事书 , price = 2.0
  Book : name = 小说 , price = 8.0
  学校课本 : 
    Book : name = 数学书 , price = 7.0
    Book : name = 英语书 , price = 3.0


目录
相关文章
|
5天前
|
设计模式 前端开发 API
写出易维护的代码|React开发的设计模式及原则
本文对React社区里出现过的一些设计模式进行了介绍,并讲解了他们遵循的设计原则。
|
9天前
|
设计模式 存储 前端开发
18:JavaBean简介及其在表单处理与DAO设计模式中的应用-Java Web
18:JavaBean简介及其在表单处理与DAO设计模式中的应用-Java Web
24 4
|
12天前
|
设计模式 消息中间件 存储
18个并发场景的设计模式详解,有没有你的盲区
这些模式在多线程并发编程中非常有用`。在分布式应用中,并发场景无处不在,理解和掌握这些并发模式的编码技巧,有助于我们在开发中解决很多问题,这要把这些与23种设计模式混淆了,虽然像单例模式是同一个,但这个是考虑并发场景下的应用。内容比较多,V哥建议可以收藏起来,即用好查。拜拜了您誒,晚安。
18个并发场景的设计模式详解,有没有你的盲区
|
17天前
|
设计模式 安全 Java
[设计模式Java实现附plantuml源码~结构型]树形结构的处理——组合模式
[设计模式Java实现附plantuml源码~结构型]树形结构的处理——组合模式
|
17天前
|
设计模式 存储 Java
C++从入门到精通:3.5设计模式——提升代码可维护性与可扩展性的关键
C++从入门到精通:3.5设计模式——提升代码可维护性与可扩展性的关键
|
20天前
|
设计模式 Java 容器
【设计模式系列笔记】组合模式
组合模式(Composite Pattern)是一种结构型设计模式,它允许将对象组合成树状结构以表示部分-整体的层次结构。组合模式使得客户端可以统一处理单个对象和对象组合,而无需区分它们的类型。
43 12
|
29天前
|
设计模式 Java
小谈设计模式(20)—组合模式
小谈设计模式(20)—组合模式
|
1月前
|
设计模式 算法 Java
23种设计模式,访问者模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】访问者模式是一种将算法与对象结构分离的设计模式。这种模式主要用于执行一个操作(或一组操作)在一个对象结构的各元素上,它可以在不修改各元素的类的前提下定义新的操作。
19 2
|
1月前
|
设计模式 算法 Java
23种设计模式,模板方法模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】模板方法模式是一种行为设计模式,它定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些特定步骤。
20 0
|
1月前
|
设计模式 算法 搜索推荐
23种设计模式,策略模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】设计模式是软件工程中的一种最佳实践指导,用于解决常见的设计问题。它们被分类为创建型、结构型和行为型模式。其中,策略模式是一种行为型设计模式,旨在定义一系列算法,封装每一个算法,并使它们可互换。策略模式允许算法独立于使用它们的客户端变化
22 1