架构师 笔试题

前言

随着软件系统规模的不断扩大,系统的架构设计变得越来越重要。而架构师则是负责系统架构设计的关键角色之一。在面试和笔试中,架构师常常需要展示他们的设计能力和技术深度。本文将介绍一道常见的架构师笔试题,并给出一个代码示例,详细解答这道题目。

题目描述

在某电商平台上,用户可以购买各种商品,并将商品添加到购物车中。购物车中可以包含多个商品,用户可以对购物车中的商品进行增删改操作。请设计一个购物车系统的类结构,并给出相应的代码示例。

分析与设计

从题目中,我们可以得出以下需求:

  1. 用户可以购买商品。
  2. 购物车可以添加商品。
  3. 购物车中的商品可以进行增删改操作。

基于上述需求,我们可以设计以下类结构:

类结构图

classDiagram
    class User {
        -id: int
        -name: string
        +buyProduct(product: Product): void
    }
    class Product {
        -id: int
        -name: string
        -price: double
    }
    class ShoppingCart {
        -id: int
        -user: User
        -products: List<Product>
        +addProduct(product: Product): void
        +removeProduct(product: Product): void
        +updateProduct(product: Product): void
    }
    User -- ShoppingCart : owns >
    Product -- ShoppingCart : contains >

根据上述类结构图,我们可以分别定义三个类:User、Product和ShoppingCart。

User类

User类表示平台上的用户,拥有购买商品的能力。User类包含以下属性和方法:

  • id:用户ID,用于唯一标识用户。
  • name:用户名,用于显示用户的名称。
  • buyProduct(product: Product):购买商品的方法,接收一个Product对象作为参数。

Product类

Product类表示电商平台上的商品,包含以下属性:

  • id:商品ID,用于唯一标识商品。
  • name:商品名称,用于显示商品的名称。
  • price:商品价格,用于显示商品的价格。

ShoppingCart类

ShoppingCart类表示用户的购物车,包含以下属性和方法:

  • id:购物车ID,用于唯一标识购物车。
  • user:购物车所属的用户。
  • products:购物车中的商品列表。
  • addProduct(product: Product):向购物车中添加商品的方法,接收一个Product对象作为参数。
  • removeProduct(product: Product):从购物车中移除商品的方法,接收一个Product对象作为参数。
  • updateProduct(product: Product):更新购物车中的商品的方法,接收一个Product对象作为参数。

代码实现

基于以上分析与设计,我们可以使用Java语言实现上述类结构。

User类的代码实现

public class User {
    private int id;
    private String name;

    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public void buyProduct(Product product) {
        // 实现购买商品的逻辑
        System.out.println(name + "购买了" + product.getName());
    }
}

Product类的代码实现

public class Product {
    private int id;
    private String name;
    private double price;

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

    // 省略属性的getter和setter方法
}

ShoppingCart类的代码实现

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

public class ShoppingCart {
    private int id;
    private User user;
    private List<Product> products;

    public ShoppingCart(int id, User user) {
        this.id = id;
        this.user = user;
        this.products = new ArrayList<>();
    }

    public void addProduct(Product product) {
        products.add(product);
        System.out.println(user.getName() + "向购物车中添加了" + product.getName());
    }

    public void removeProduct(Product product) {
        products.remove(product);
        System.out.println(user.getName() + "从购物车中移除了" + product.getName