津津乐道设计模式 - 迭代器模式详解(以购物车的场景来演示迭代器模式)

这篇具有很好参考价值的文章主要介绍了津津乐道设计模式 - 迭代器模式详解(以购物车的场景来演示迭代器模式)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

津津乐道设计模式 - 迭代器模式详解(以购物车的场景来演示迭代器模式),设计模式,设计模式,迭代器模式

😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~
🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志
🎐 个人CSND主页——Micro麦可乐的博客
🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战
🌺《RabbitMQ》本专栏主要介绍使用JAVA开发RabbitMQ的系列教程,从基础知识到项目实战
🌸《设计模式》专栏以实际的生活场景为案例进行讲解,让大家对设计模式有一个更清晰的理解
如果文章能够给大家带来一定的帮助!欢迎关注、评论互动~

什么是迭代器模式

迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供了一种访问容器对象中各个元素的方法,而无需暴露容器的内部结构。迭代器模式将遍历元素和访问元素的责任分离,使得代码更加简洁、灵活,并且符合开闭原则。

迭代器模式的核心思想是将容器对象的遍历操作封装在一个迭代器对象中,迭代器对象负责维护当前遍历的位置,并提供一系列方法来访问容器中的元素。这样,客户端可以通过迭代器对象来逐个访问容器中的元素,而不需要关心容器的具体实现细节。

迭代器模式适用场景

迭代器模式适用于以下场景:

  • 需要遍历一个聚合对象(如列表、集合等)中的元素,但又不想暴露聚合对象的内部结构

  • 需要对聚合对象提供多种不同的遍历方式

  • 希望统一遍历不同聚合对象的接口

  • 希望通过迭代器来封装对聚合对象的遍历,以简化客户端代码

迭代器模式可以提供一种统一的遍历方式,使得客户端代码与具体的聚合对象解耦,增加了代码的灵活性和可扩展性。它适用于需要遍历聚合对象中的元素,但不希望暴露聚合对象内部结构的情况。

代码案例

在JAVA开发中最常见的就是使用JDK自带的Iterator 遍历集合,也正是因为很多语言都把都将迭代器作为一个基础的类库直接提供出来了,我们可以直接使用。当然理解原理才能帮助我们更好的使用这些工具类

下面我们以一个购物车的场景来演示迭代器模式

津津乐道设计模式 - 迭代器模式详解(以购物车的场景来演示迭代器模式),设计模式,设计模式,迭代器模式
假设我们现在有一个购物车,其中存放着各种商品。现在我们需要遍历购物车中的商品,并对它们进行一些操作,比如计算总价、查找特定商品等。这时,我们可以使用迭代器模式来实现这个场景。

首先,我们定义一个商品类(Product)作为聚合对象中的元素:

// 商品类
class Product {
    private String name;
    private double price;

    public Product(String name, double price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public double getPrice() {
        return price;
    }
}

然后,我们定义一个迭代器接口(Iterator),其中包含了遍历商品和访问商品的方法:

// 迭代器接口
interface Iterator {
    boolean hasNext();
    Product next();
}

接下来,我们定义购物车类(ShoppingCart)作为聚合对象,实现迭代器接口,并提供一些方法来管理商品:

// 购物车类
class ShoppingCart implements Iterator {
    private List<Product> products;
    private int position;

    public ShoppingCart(List<Product> products) {
        this.products = products;
        this.position = 0;
    }

    @Override
    public boolean hasNext() {
        return position < products.size();
    }

    @Override
    public Product next() {
        if (hasNext()) {
            Product product = products.get(position);
            position++;
            return product;
        }
        return null;
    }
    // 其他购物车相关的方法...
}

现在,我们可以在客户端中使用购物车对象进行遍历和操作:

public class Client {
    public static void main(String[] args) {
        List<Product> products = new ArrayList<>();
        products.add(new Product("手机", 999.99));
        products.add(new Product("电视", 1999.99));
        products.add(new Product("耳机", 99.99));

        ShoppingCart shoppingCart = new ShoppingCart(products);

        while (shoppingCart.hasNext()) {
            Product product = shoppingCart.next();
            System.out.println("商品:" + product.getName() + ",价格:" + product.getPrice());
        }
    }
}

在上述代码中,我们通过创建购物车对象,并使用迭代器接口的方法来遍历购物车中的商品。通过迭代器的hasNext方法判断是否还有下一个商品,通过next方法获取下一个商品。

通过使用迭代器模式,我们将购物车的遍历操作封装在迭代器中,客户端代码与购物车的具体实现解耦,增加了代码的灵活性和可维护性。同时,我们可以通过扩展迭代器接口,实现不同的遍历方式,提供更多的灵活性和功能。

迭代器模式优缺点

迭代器模式的优点:

  • 简化了客户端代码:使用迭代器模式,客户端不需要关心聚合对象的内部结构,只需通过迭代器接口来遍历聚合对象的元素,简化了客户端代码。

  • 提供了多种遍历方式:通过定义不同的迭代器,可以实现多种不同的遍历方式,如正序遍历、逆序遍历等,增加了灵活性。

  • 封装了迭代器的实现:迭代器模式将迭代器的实现细节封装在聚合对象内部,客户端无需了解具体实现,使得聚合对象和迭代器对象的职责清晰分离。

  • 支持对聚合对象的并发遍历:某些特定的迭代器实现可以支持对聚合对象的并发遍历,提高了代码的并发性和性能。

迭代器模式的缺点:

  • 增加了类的数量:引入迭代器模式会增加迭代器接口和具体迭代器的实现类,可能会使得类的数量增多,增加了系统的复杂性。

  • 遍历过程中修改聚合对象可能导致问题:如果在迭代过程中修改了聚合对象的结构,可能会导致迭代器的行为不可预测,需要在使用迭代器时注意避免这种情况。

  • 迭代器模式适用于顺序访问的集合类型:如果聚合对象的内部结构发生变化,可能会导致迭代器的实现也需要相应修改。

迭代器模式适用于需要遍历聚合对象中的元素,并且希望将遍历操作和聚合对象的具体实现解耦的场景。在使用迭代器模式时需要权衡其优点和缺点,并根据具体场景来选择是否使用

结语

本章节主要介绍了迭代器模式、迭代器模式适用场景、迭代器模式的优缺点,并以购物车的场景来演示迭代器模式,如果本文对你有用,欢迎关注收藏评论,后续将陆续推出更多优质的博文与大家一起分享交流~文章来源地址https://www.toymoban.com/news/detail-563606.html

到了这里,关于津津乐道设计模式 - 迭代器模式详解(以购物车的场景来演示迭代器模式)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 设计模式 ~ 迭代器模式

    迭代器是一种设计模式,提供了一种顺序访问集合或容器中元素的方法,无需暴露集合的内部结构,for 循环并不是迭代器模式 ,forEach 是最简易的迭代器。 以下函数实现了 next 方法,调用该方法返回集合中的下一个元素 value 表示当前迭代到的元素值 done 表示迭代是否已经结

    2024年02月16日
    浏览(37)
  • 设计模式-迭代器模式

      迭代器模式(Iterator Design Pattern),也叫作游标模式(Cursor Design Pattern)。它用来遍历集合对象。这里说的“集合对象”也可以叫“容器”“聚合对象”,实际上就是包含一组对象的对象,比如数组、链表、树、图、跳表。迭代器模式将集合对象的遍历操作从集合类中拆

    2024年02月05日
    浏览(53)
  • 设计模式——迭代器模式

    它提供一种方法访问一个容器对象中各个元素,而又不需要暴露该对象的内部细节。 迭代器是为容器服务的,能容纳元素的对象可以称为容器,例:List、Set、Map 迭代器模式(Iterator Pattern)已经是没落的设计模式,常用的容器基本都有成熟稳定的实现,基本不会再去单独写一

    2024年02月13日
    浏览(41)
  • 设计模式:迭代器模式

    迭代器模式的示例可以涵盖各种数据结构的遍历,包括数组、列表、树、图等。下面是一些不同场景下迭代器模式的示例及其代码实现。 示例 1: 数组遍历 使用迭代器模式遍历数组。 示例 2: 二叉树的深度优先遍历 二叉树的深度优先遍历(使用栈实现)。 示例 3: 分页遍历 在

    2024年04月11日
    浏览(49)
  • 设计模式浅析(十) ·设计模式之迭代器&组合模式

    日常叨逼叨 java设计模式浅析,如果觉得对你有帮助,记得一键三连,谢谢各位观众老爷😁😁 案例 有两家门店,门店A呢只提供早餐,门店B呢只提供午餐,有一天这两家店铺想要进行合并,一起做大做强,再创辉煌。 合并后呢,对于菜单的定制存在了一定的问题: 门店A的

    2024年04月11日
    浏览(49)
  • 设计模式——迭代器模式15

    迭代器模式提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。 设计模式,一定要敲代码理解 迭代器模式将数据存储和数据遍历的职责进行分离。但针对不同结构的迭代对象,迭代方式需进行添加。 代码下载

    2024年04月15日
    浏览(46)
  • 行为型设计模式——迭代器模式

    迭代器模式也是非常的简单, 定义如下: 提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。 相信大家都使用过类似下面的迭代器: 如果在你的项目中需要对一个自定义的集合进行迭代遍历,那么迭代器模式是非常需要学习的。迭代器模式主

    2024年01月18日
    浏览(43)
  • 设计模式行为型——迭代器模式

    目录 迭代器模式的定义 迭代器模式的实现 迭代器模式角色 迭代器模式类图 迭代器模式代码实现 迭代器模式的特点 优点 缺点 使用场景 注意事项         迭代器模式(Iterator Pattern)属于行为型模式,其提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对

    2024年02月14日
    浏览(37)
  • Java 设计模式——迭代器模式

    迭代器模式 (Iterator Pattern) 是一种行为型设计模式, 它提供一种顺序访问聚合对象(如列表、集合等)中的元素,而无需暴露聚合对象的内部表示 。迭代器模式将遍历逻辑封装在一个 迭代器对象 中,使得我们可以使用统一的方式遍历不同类型的聚合对象,同时也可以简化客

    2024年02月16日
    浏览(38)
  • 设计模式学习笔记 - 设计模式与范式 -行为型:9.迭代器模式(上):相比直接遍历集合数据,使用迭代器模式有哪些优势?

    上篇文章,我们学习了状态模式。状态模式是状态机的一种实现方式。它通过将事件触发的状态转移和动作执行,拆分到不同的状态类中,以此来避免状态机类中的分支判断逻辑,应对状态机类代码的复杂性。 本章,学习另外一种行为型设计模式,迭代器模式。它用来遍历集

    2024年04月15日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包