架构师 笔试题
前言
随着软件系统规模的不断扩大,系统的架构设计变得越来越重要。而架构师则是负责系统架构设计的关键角色之一。在面试和笔试中,架构师常常需要展示他们的设计能力和技术深度。本文将介绍一道常见的架构师笔试题,并给出一个代码示例,详细解答这道题目。
题目描述
在某电商平台上,用户可以购买各种商品,并将商品添加到购物车中。购物车中可以包含多个商品,用户可以对购物车中的商品进行增删改操作。请设计一个购物车系统的类结构,并给出相应的代码示例。
分析与设计
从题目中,我们可以得出以下需求:
- 用户可以购买商品。
- 购物车可以添加商品。
- 购物车中的商品可以进行增删改操作。
基于上述需求,我们可以设计以下类结构:
类结构图
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