请就可乐商城这一课题编写设计模式课程设计书
时间: 2023-06-18 10:07:46 浏览: 244
设计模式课程设计
4星 · 用户满意度95%
1. 需求分析
可乐商城需要一个系统来管理商品、订单、支付等业务。系统需要支持用户注册、登录、浏览商品、下单、支付等功能。在系统设计中,需要考虑到系统的可扩展性和灵活性。
2. 总体设计思路
本系统采用前后端分离的架构,前端使用Vue.js框架,后端使用SpringBoot框架。前后端通过RESTful API进行通信。系统中使用了以下设计模式:
- 工厂方法模式:用于创建用户、商品、订单等对象。
- 单例模式:用于确保系统中只存在一个购物车对象。
- 观察者模式:用于实现订单支付状态的更新。
- 策略模式:用于实现不同的支付方式。
3. 类图设计
![类图](https://img-blog.csdnimg.cn/20211203160955504.png)
4. 工厂方法模式
工厂方法模式是一种创建型设计模式,它提供了一种将对象的创建委托给子类的方式,从而解决了对象创建的问题。在本系统中,我们使用工厂方法模式来创建用户、商品、订单等对象。
- 抽象产品类:Product
```java
public abstract class Product {
// 商品名称
protected String name;
// 商品价格
protected double price;
// 商品描述
protected String description;
// 获取商品名称
public String getName() {
return name;
}
// 获取商品价格
public double getPrice() {
return price;
}
// 获取商品描述
public String getDescription() {
return description;
}
}
```
- 具体产品类:User、Goods、Order
```java
public class User extends Product {
// 用户名
private String username;
// 密码
private String password;
// 地址
private String address;
// 构造函数
public User(String name, double price, String description, String username, String password, String address) {
this.name = name;
this.price = price;
this.description = description;
this.username = username;
this.password = password;
this.address = address;
}
// 获取用户名
public String getUsername() {
return username;
}
// 获取密码
public String getPassword() {
return password;
}
// 获取地址
public String getAddress() {
return address;
}
}
public class Goods extends Product {
// 商品编号
private int id;
// 构造函数
public Goods(String name, double price, String description, int id) {
this.name = name;
this.price = price;
this.description = description;
this.id = id;
}
// 获取商品编号
public int getId() {
return id;
}
}
public class Order extends Product {
// 订单编号
private int id;
// 商品列表
private List<Product> products;
// 构造函数
public Order(String name, double price, String description, int id, List<Product> products) {
this.name = name;
this.price = price;
this.description = description;
this.id = id;
this.products = products;
}
// 获取订单编号
public int getId() {
return id;
}
// 获取商品列表
public List<Product> getProducts() {
return products;
}
}
```
- 抽象工厂类:Factory
```java
public abstract class Factory {
// 创建用户
public abstract User createUser(String name, double price, String description, String username, String password, String address);
// 创建商品
public abstract Goods createGoods(String name, double price, String description, int id);
// 创建订单
public abstract Order createOrder(String name, double price, String description, int id, List<Product> products);
}
```
- 具体工厂类:UserFactory、GoodsFactory、OrderFactory
```java
public class UserFactory extends Factory {
// 创建用户
@Override
public User createUser(String name, double price, String description, String username, String password, String address) {
return new User(name, price, description, username, password, address);
}
// 创建商品
@Override
public Goods createGoods(String name, double price, String description, int id) {
return null;
}
// 创建订单
@Override
public Order createOrder(String name, double price, String description, int id, List<Product> products) {
return null;
}
}
public class GoodsFactory extends Factory {
// 创建用户
@Override
public User createUser(String name, double price, String description, String username, String password, String address) {
return null;
}
// 创建商品
@Override
public Goods createGoods(String name, double price, String description, int id) {
return new Goods(name, price, description, id);
}
// 创建订单
@Override
public Order createOrder(String name, double price, String description, int id, List<Product> products) {
return null;
}
}
public class OrderFactory extends Factory {
// 创建用户
@Override
public User createUser(String name, double price, String description, String username, String password, String address) {
return null;
}
// 创建商品
@Override
public Goods createGoods(String name, double price, String description, int id) {
return null;
}
// 创建订单
@Override
public Order createOrder(String name, double price, String description, int id, List<Product> products) {
return new Order(name, price, description, id, products);
}
}
```
5. 单例模式
单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供了访问该实例的全局方式。在本系统中,我们使用单例模式来确保系统中只存在一个购物车对象。
- 单例类:Cart
```java
public class Cart {
// 购物车实例
private static Cart cart;
// 私有构造函数
private Cart() {}
// 获取购物车实例
public static Cart getInstance() {
if (cart == null) {
cart = new Cart();
}
return cart;
}
// 添加商品到购物车
public void addProduct(Product product) {
// TODO: 添加商品到购物车
}
// 从购物车删除商品
public void removeProduct(Product product) {
// TODO: 从购物车删除商品
}
// 获取购物车中的商品列表
public List<Product> getProducts() {
// TODO: 获取购物车中的商品列表
return null;
}
}
```
6. 观察者模式
观察者模式是一种行为型设计模式,它定义了对象之间的一对多依赖关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。在本系统中,我们使用观察者模式来实现订单支付状态的更新。
- 抽象观察者类:Observer
```java
public interface Observer {
// 更新订单支付状态
void update(boolean paid);
}
```
- 具体观察者类:User
```java
public class User implements Observer {
// 用户名
private String username;
// 构造函数
public User(String username) {
this.username = username;
}
// 更新订单支付状态
@Override
public void update(boolean paid) {
// TODO: 更新订单支付状态
}
}
```
- 抽象主题类:Subject
```java
public interface Subject {
// 添加观察者
void attach(Observer observer);
// 删除观察者
void detach(Observer observer);
// 通知观察者
void notify(boolean paid);
}
```
- 具体主题类:Order
```java
public class Order implements Subject {
// 订单编号
private int id;
// 商品列表
private List<Product> products;
// 观察者列表
private List<Observer> observers = new ArrayList<>();
// 构造函数
public Order(int id, List<Product> products) {
this.id = id;
this.products = products;
}
// 添加观察者
@Override
public void attach(Observer observer) {
observers.add(observer);
}
// 删除观察者
@Override
public void detach(Observer observer) {
observers.remove(observer);
}
// 通知观察者
@Override
public void notify(boolean paid) {
for (Observer observer : observers) {
observer.update(paid);
}
}
// 支付订单
public void pay(String paymentMethod) {
// TODO: 支付订单
notify(true);
}
}
```
7. 策略模式
策略模式是一种行为型设计模式,它定义了一系列算法,将每个算法都封装起来,并使它们之间可以互换。在本系统中,我们使用策略模式来实现不同的支付方式。
- 抽象策略类:PaymentMethod
```java
public interface PaymentMethod {
// 支付订单
void pay(Order order);
}
```
- 具体策略类:Alipay、WechatPay
```java
public class Alipay implements PaymentMethod {
// 支付订单
@Override
public void pay(Order order) {
// TODO: 使用支付宝支付订单
}
}
public class WechatPay implements PaymentMethod {
// 支付订单
@Override
public void pay(Order order) {
// TODO: 使用微信支付订单
}
}
```
- 策略上下文类:PaymentContext
```java
public class PaymentContext {
// 支付方式
private PaymentMethod paymentMethod;
// 设置支付方式
public void setPaymentMethod(PaymentMethod paymentMethod) {
this.paymentMethod = paymentMethod;
}
// 支付订单
public void pay(Order order) {
paymentMethod.pay(order);
}
}
```
8. 总结
本系统采用前后端分离的架构,前端使用Vue.js框架,后端使用SpringBoot框架。前后端通过RESTful API进行通信。系统中使用了工厂方法模式、单例模式、观察者模式、策略模式等多种设计模式,从而提高了系统的可扩展性和灵活性。通过本系统的设计与实现,我们可以更好地理解和应用设计模式,提高软件开发的效率和质量。
阅读全文