动态属性商品订单生成:建造者模式应用详解
这种情况可以使用建造者模式。建造者模式可以根据不同的属性组合来构建不同的对象,符合商品动态组合属性的需求。具体实现可以定义商品建造者类,根据不同的属性组合来构建商品对象,同时也可以定义订单建造者类,根据商品对象以及购买用户的属性来构建订单对象。例如:
public class Product {
private BigDecimal price;
private String level;
private String pool;
private Product() {}
// Builder Class
public static class Builder {
private BigDecimal price;
private String level;
private String pool;
public Builder setPrice(BigDecimal price) {
this.price = price;
return this;
}
public Builder setLevel(String level) {
this.level = level;
return this;
}
public Builder setPool(String pool) {
this.pool = pool;
return this;
}
public Product build() {
Product product = new Product();
product.price = this.price;
product.level = this.level;
product.pool = this.pool;
return product;
}
}
// getters
}
public class Order {
private Product product;
private String user;
private String time;
private Order() {}
// Builder Class
public static class Builder {
private Product product;
private String user;
private String time;
public Builder setProduct(Product product) {
this.product = product;
return this;
}
public Builder setUser(String user) {
this.user = user;
return this;
}
public Builder setTime(String time) {
this.time = time;
return this;
}
public Order build() {
Order order = new Order();
order.product = this.product;
order.user = this.user;
order.time = this.time;
return order;
}
}
// getters
}
然后可以根据不同的属性组合来构建商品和订单:
// 新用户购买普通商品
Product product1 = new Product.Builder()
.setPrice(new BigDecimal('100'))
.setLevel('普通')
.setPool('A')
.build();
Order order1 = new Order.Builder()
.setProduct(product1)
.setUser('新用户')
.setTime('2022/01/01')
.build();
// 老用户购买高档商品
Product product2 = new Product.Builder()
.setPrice(new BigDecimal('1000'))
.setLevel('高档')
.setPool('B')
.build();
Order order2 = new Order.Builder()
.setProduct(product2)
.setUser('老用户')
.setTime('2022/01/01')
.build();
// 首次购买用户购买普通商品并赠送额外商品
Product product3 = new Product.Builder()
.setPrice(new BigDecimal('200'))
.setLevel('普通')
.setPool('C')
.build();
Product extraProduct = new Product.Builder()
.setPrice(new BigDecimal('50'))
.setLevel('普通')
.setPool('D')
.build();
Order order3 = new Order.Builder()
.setProduct(product3)
.setUser('首次购买用户')
.setTime('2022/01/01')
.build();
order3.setExtraProduct(extraProduct);
原文地址: https://www.cveoy.top/t/topic/lLZL 著作权归作者所有。请勿转载和采集!