OrderItem.java
Jpro1124
plain_text
a year ago
3.2 kB
21
Indexable
import java.util.ArrayList;
import java.util.List;
/**
* OrderItem class represents a single food item in an order
* This is the product class that will be built by OrderItemBuilder
*/
public class OrderItem {
private String name;
private double price;
private int quantity;
private String size;
private List<String> extras;
// Private constructor to force use of builder
private OrderItem() {
this.extras = new ArrayList<>();
}
// Getters
public String getName() {
return name;
}
public double getPrice() {
return price;
}
public int getQuantity() {
return quantity;
}
public String getSize() {
return size;
}
public List<String> getExtras() {
return new ArrayList<>(extras); // Return copy to maintain encapsulation
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(quantity).append("x ").append(name);
if (size != null && !size.isEmpty()) {
sb.append(" (").append(size).append(")");
}
if (!extras.isEmpty()) {
sb.append(" with ").append(String.join(", ", extras));
}
sb.append(" - $").append(String.format("%.2f", price * quantity));
return sb.toString();
}
/**
* Builder class for OrderItem
* Implements the Builder pattern for constructing OrderItem objects
*/
public static class OrderItemBuilder {
private OrderItem item;
public OrderItemBuilder() {
this.item = new OrderItem();
}
public OrderItemBuilder setName(String name) {
item.name = name;
return this;
}
public OrderItemBuilder setPrice(double price) {
item.price = price;
return this;
}
public OrderItemBuilder setQuantity(int quantity) {
if (quantity <= 0) {
throw new IllegalArgumentException("Quantity must be positive");
}
item.quantity = quantity;
return this;
}
public OrderItemBuilder setSize(String size) {
item.size = size;
return this;
}
public OrderItemBuilder addExtra(String extra) {
if (extra != null && !extra.trim().isEmpty()) {
item.extras.add(extra);
}
return this;
}
public OrderItem build() {
// Validation
if (item.name == null || item.name.trim().isEmpty()) {
throw new IllegalStateException("Item name is required");
}
if (item.price < 0) {
throw new IllegalStateException("Price cannot be negative");
}
if (item.quantity <= 0) {
throw new IllegalStateException("Quantity must be positive");
}
return item;
}
}
}
Editor is loading...
Leave a Comment