import java.util.ArrayList; import java.util.List; class ShoppingCart { private final List products = new ArrayList<>(); public List getProducts() { return products; } public void addProduct(Product product) { products.add(product); } } class Product { private final String id; private final String name; private final double price; public Product(String id, String name, double price) { this.id = id; this.name = name; this.price = price; } public String getId() { return id; } public String getName() { return name; } public double getPrice() { return price; } } public class Example01 { public static void main(String[] args) { // --- Independent Product Catalog (Products exist regardless of any cart) --- Product p1 = new Product("P001", "Laptop", 1200.0); Product p2 = new Product("P002", "Headphones", 80.0); Product p3 = new Product("P003", "Mouse", 25.0); // --- Create a ShoppingCart (aggregation: cart contains products) --- ShoppingCart cart = new ShoppingCart(); cart.addProduct(p1); cart.addProduct(p2); cart.addProduct(p3); System.out.println("Products in the cart:"); for (Product p : cart.getProducts()) { System.out.println("- " + p.getName()); } // --- Destroy the cart (cart is abandoned or session expires) --- cart = null; System.out.println("\nShoppingCart destroyed."); // --- Products still exist (aggregation: independent lifetime) --- System.out.println("Products still exist in the catalog:"); System.out.println("- " + p1.getName()); System.out.println("- " + p2.getName()); System.out.println("- " + p3.getName()); } }