Bootstrap

迭代器模式(Iterator Pattern):电商平台商品分类浏览实战案例分析

image.png

肖哥弹架构 跟大家“弹弹” 业务中设计模式的使用,需要代码关注

欢迎 点赞,点赞,点赞。

关注公号Solomon肖哥弹架构获取更多精彩内容

在电商平台中,商品按照不同的分类进行组织,如电子产品、服装、图书等。用户希望按照分类浏览商品,同时能够方便地在不同分类间切换。

2. 为什么要使用迭代器设计模式

迭代器模式提供了一种顺序访问聚合对象元素的方法,而不暴露其内部的形态。这使得用户可以统一地访问各种不同的商品分类。

3. 标准迭代器设计模式图

4. 业务迭代器设计模式图

5. 业务代码参考

// 产品类

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;
    }

    @Override
    public String toString() {
        return "Product{" +"name=" + name  +", price=" + price +'}';
    }
}

// 商品分类接口
interface ProductCategory {
    ProductCategoryIterator createIterator();
}

// 商品分类具体实现
class ConcreteProductCategory implements ProductCategory {
    private List<Product> products = new ArrayList<>();

    public void addProduct(Product product) {
        products.add(product);
    }

    @Override
    public ProductCategoryIterator createIterator() {
        return new ConcreteProductCategoryIterator(products);
    }
}

// 商品分类迭代器接口
interface ProductCategoryIterator {
    void first();
    void next();
    boolean isDone();
    Product getCurrentProduct();
}

// 商品分类迭代器具体实现
class ConcreteProductCategoryIterator implements ProductCategoryIterator {
    private List<Product> products;
    private int currentIndex = 0;

    public ConcreteProductCategoryIterator(List<Product> products) {
        this.products = products;
    }

    @Override
    public void first() {
        currentIndex = 0;
    }

    @Override
    public void next() {
        if (currentIndex < products.size() - 1) {
            currentIndex++;
        }
    }

    @Override
    public boolean isDone() {
        return currentIndex >= products.size();
    }

    @Override
    public Product getCurrentProduct() {
        if (currentIndex >= 0 && currentIndex < products.size()) {
            return products.get(currentIndex);
        }
        return null;
    }
}

// 客户端使用
class ECommercePlatform {
    public static void main(String[] args) {
        ConcreteProductCategory category = new ConcreteProductCategory();
        category.addProduct(new Product("手机", 2999.00));
        category.addProduct(new Product("电脑", 5999.00));
        // 添加更多商品...

        ProductCategoryIterator iterator = category.createIterator();
        while (!iterator.isDone()) {
            System.out.println(iterator.getCurrentProduct());
            iterator.next();
        }
    }
}
6. 使用迭代器设计模式的好处
  • 访问控制:提供了一种受控的方式来访问商品分类中的元素。
  • 解耦:商品分类的表示和遍历方式解耦,新增分类或遍历方式时互不影响。
7. 其他使用迭代器设计模式场景参考
  • 论坛帖子浏览:用户可以按顺序浏览论坛帖子。
  • 数据集合的遍历:如数据库结果集的统一访问。
8. 可参考开源框架
  • Java Collections FrameworkIterator接口和Iterable接口提供了遍历集合的统一方式。

总结

迭代器模式提供了一种统一的方法来遍历不同的集合结构,使得遍历过程与集合的具体实现解耦,提高了代码的复用性和可扩展性。

历史热点文章

;