19
Feb

Simple shopping cart implementation in Java

http://defectracker.com/wp-content/uploads/2020/02/shoppingCart.7z

Simple shopping cart implementation in Java
================================================

Step 1:  Products class
=========================

public class Item {
	private String prdCode;
	private int price;

	public String getPrdCode() {
		return prdCode;
	}

	public int getPrice() {
		return price;
	}

	public Item(String prdCode, int price) {
		super();
		this.prdCode = prdCode;
		this.price = price;
	}

	@Override
	public String toString() {
		return "Item [prdCode=" + prdCode + ", price=" + price + "]";
	}

}


Step 2: Create a PaymentMethod
================================

public interface PaymentStrategy {
	public void pay(int amount);
}


Step 2.1 Create PaymentMethod implementations
==============================================

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class CreaditCardStrategy implements PaymentStrategy {
	final Logger log = LoggerFactory.getLogger(CreaditCardStrategy.class);

	private String name;
	private String cardNumber;
	private String cvv;
	private String dateOfExpiry;

	public CreaditCardStrategy(String nm, String ccNum, String cvv, String expiryDate) {
		this.name = nm;
		this.cardNumber = ccNum;
		this.cvv = cvv;
		this.dateOfExpiry = expiryDate;
	}

	@Override
	public void pay(int amount) {
		log.info("{} paid with credit/debit card by {}{}{}{}", amount, name, cardNumber, cvv);
	}
}


Step 2.2 Create PaymentMethod implementation for PayPal
=========================================================


import com.github.tonydeng.desgin.strategy.PaymentStrategy;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class PaypalStrategy implements PaymentStrategy {
    private static final Logger log = LoggerFactory.getLogger(PaypalStrategy.class);

    private String email;
    private String password;

    public PaypalStrategy(String email, String pwd) {
        this.email = email;
        this.password = pwd;
    }

    @Override
    public void pay(int amount) {
        log.info("{} paid using Paypal by {}", amount, email);
    }
}


Step 3:  Create your shopping Cart
======================================

import java.util.ArrayList;
import java.util.List;

public class ShoppingCart {

	List<Item> items;

    public ShoppingCart() {
        this.items = new ArrayList<>();
    }
    
    public void addItem(Item i) {
    	if(i!= null) {
    		items.add(i);
    	}
    }
    
    public void removeItem(Item i) {
    	if(items.contains(i))
    		items.remove(i);
    }
    
    public int calculateTotal() {
        int sum = 0;
        for (Item item : items) {
            sum += item.getPrice();
        }
        return sum;
    }
    
    public void pay(PaymentStrategy payment) {
        payment.pay(calculateTotal());
    }
    
    public void displayCart() {
    	for(Item i: items)
    		System.out.println(i);
    }
}


Step 4:  Client
=================

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Client4ShoppingCart {

	public static void main(String[] args) {
		final Logger log = LoggerFactory.getLogger(Client4ShoppingCart.class);
		log.info("Starting client");
		Item item1 = new Item("Cup", 99);
		Item item2 = new Item("Plate", 99);

		ShoppingCart sc = new ShoppingCart();
		
		sc.addItem(item1);
		sc.addItem(item2);
		
		sc.displayCart();
		int total = sc.calculateTotal();
		log.info("Total cart value: ",total);
		sc.pay(new CreaditCardStrategy("Name", "CC No", "CVV", "Expiry"));
		
	}

}


Output:
Item [prdCode=Cup, price=99]
Item [prdCode=Plate, price=99]
Total cart value: 198



***** Shopping cart with LinkedHashMap *****

package shoppingCart;

import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;

public class ShoppingCart {

	Map<String, Integer> items;

	public ShoppingCart() {
		this.items = new LinkedHashMap<>();
	}

	public void addItem(Item i) {
		items.put(i.getPrdCode(), items.containsKey(i.getPrdCode()) ? (items.get(i.getPrdCode())+1)*i.getPrice() : 1*i.getPrice());
	}

	public void removeItem(Item i) {
		if (items.containsKey(i.getPrdCode()))
			items.remove(i);
	}

	public int calculateTotal() {
		int sum = 0;
		Iterator<String> itr = items.keySet().iterator();
		while (itr.hasNext()) {
			String product = itr.next();
			int cost = items.get(product);
			sum = sum + cost;
		}
		return sum;
	}

	public void pay(PaymentStrategy payment) {
		payment.pay(calculateTotal());
	}

	public void displayCart() {
		for (String i : items.keySet())
			System.out.println(i);
	}
}