赞
踩
本篇文章将介绍如何设计一个在线购物系统,系统包括购物车、订单处理、支付等功能。我们将通过这一项目,应用组合模式、命令模式、策略模式和观察者模式来解决具体的设计问题。
设计一个在线购物系统,用户可以浏览商品、将商品添加到购物车、提交订单并完成支付。系统需要支持多种支付方式,并且能够在订单状态变化时通知用户。
整个在线购物系统的业务流程如下:
import java.util.ArrayList; import java.util.List; // 产品接口 interface ProductComponent { double getPrice(); } // 商品类 class Product implements ProductComponent { private String name; private double price; public Product(String name, double price) { this.name = name; this.price = price; } @Override public double getPrice() { return this.price; } public String getName() { return name; } } // 购物车类 class ShoppingCart implements ProductComponent { private List<ProductComponent> items = new ArrayList<>(); public void addItem(ProductComponent item) { items.add(item); } public void removeItem(ProductComponent item) { items.remove(item); } @Override public double getPrice() { return items.stream().mapToDouble(ProductComponent::getPrice).sum(); } public List<ProductComponent> getItems() { return items; } }
// 订单类 class Order { private String status; public void submit() { this.status = "Submitted"; notifyObservers(); } public void cancel() { this.status = "Canceled"; notifyObservers(); } public String getStatus() { return status; } private List<Observer> observers = new ArrayList<>(); public void addObserver(Observer observer) { observers.add(observer); } public void notifyObservers() { for (Observer observer : observers) { observer.update("Order status changed to " + status); } } } // 命令接口 interface OrderCommand { void execute(); } // 提交订单命令 class SubmitOrderCommand implements OrderCommand { private Order order; public SubmitOrderCommand(Order order) { this.order = order; } @Override public void execute() { order.submit(); } } // 取消订单命令 class CancelOrderCommand implements OrderCommand { private Order order; public CancelOrderCommand(Order order) { this.order = order; } @Override public void execute() { order.cancel(); } }
// 支付策略接口 interface PaymentStrategy { void pay(double amount); } // 信用卡支付策略 class CreditCardPayment implements PaymentStrategy { @Override public void pay(double amount) { // 信用卡支付逻辑 System.out.println("Paid " + amount + " using Credit Card."); } } // 支付宝支付策略 class AlipayPayment implements PaymentStrategy { @Override public void pay(double amount) { // 支付宝支付逻辑 System.out.println("Paid " + amount + " using Alipay."); } } // 支付上下文 class PaymentContext { private PaymentStrategy strategy; public void setPaymentStrategy(PaymentStrategy strategy) { this.strategy = strategy; } public void pay(double amount) { strategy.pay(amount); } }
// 观察者接口 interface Observer { void update(String message); } // 用户类 class User implements Observer { private String name; public User(String name) { this.name = name; } @Override public void update(String message) { System.out.println("Notify " + name + ": " + message); } }
public class Main { public static void main(String[] args) { // 创建用户 User user = new User("Alice"); // 创建商品 Product product1 = new Product("Laptop", 1000); Product product2 = new Product("Phone", 500); // 创建购物车并添加商品 ShoppingCart cart = new ShoppingCart(); cart.addItem(product1); cart.addItem(product2); System.out.println("Total cart price: " + cart.getPrice()); // 创建订单并添加观察者 Order order = new Order(); order.addObserver(user); // 提交订单 OrderCommand submitOrder = new SubmitOrderCommand(order); submitOrder.execute(); // 选择支付方式并支付 PaymentContext paymentContext = new PaymentContext(); paymentContext.setPaymentStrategy(new CreditCardPayment()); paymentContext.pay(cart.getPrice()); // 取消订单 OrderCommand cancelOrder = new CancelOrderCommand(order); cancelOrder.execute(); } }
通过本项目,我们综合应用了组合模式、命令模式、策略模式和观察者模式,解决了在线购物系统的设计需求。通过这些模式,我们实现了系统模块的解耦和灵活扩展,使得代码结构更加清晰、易于维护。
如果你喜欢这篇文章,请关注、收藏、点赞,并查看我的专栏“深入学习设计模式”获取更多内容。你的支持是我持续创作的动力!
推荐两个专栏:
通过这样详细的设计和实现过程,读者可以在实践中深入理解并应用设计模式。这种结构不仅能够提升文章的实用性和可读性,还能有效推广专栏内容。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。