If you have read my previous article which solely focuses on getting you started with the JAVA Collections framework then it’s time to dig a little deeper and create a Shopping Cart application to demonstrate the use of Collections in a real-world application.
I have chosen Shopping Cart application for this purpose because I found it perfect for implementing collections in this application.
Shopping Cart application will help you in modelling real-world entities into code.
Table of Contents
Project Structure
- Create a new Java Project with whatever name you like.
- Create the following package under your src folder,
- collections.shoppingcart
- For simplicity, all of the code will reside inside this package.
Classes Used
- Product.java
- Products.java
- Cart.java
- UI.java
- Main.java
For this example project, make sure all of the above-mentioned classes resides under the same package, i.e, collections.shoppingcart.
I will take each class
one by one and explain the significance of it.
Product.java
Go through the code below,
This is a concrete class which contains Product properties and provides setters and getters for it. I have also override the Hash and Equals method.
equals()
method is used to compare two objects based on their properties.hashCode()
is a unique hash/number attached to every object whenever the object is created.
So whenever two objects are compared. Their hash code and properties are compared. If both (hash code & properties value) are same then the object is considered equal otherwise not equal.
Therefore, it is very important to override hascode() and equals() method of an object.
Following is a very well explained answer that tells you the importance of overriding hashcode and equals for object comparison.
Products.java
Go through the code below,
The role of this class in your Shopping Cart Application is to provide you with the store products.
In other words, this class is used to initialize your store as soon as the application is started. In real-world application, the items will be retrieved from user session or database. For simplicity, I’m using Products class to initialize objects.
As you can see, theinitStoreItems()
method is used to add the products into a new ArrayList of type Product.
If you have read my previous article on Understanding Collections in JAVA then you will be familiar with the Generic Collection.
As we have provided the Product class inside the <> braces as new ArrayList(), this will tell the compiler that the list is of type Product and it can only contain an item which belongs to type Product.
Cool.
You are half way there.
Cart.java
This is a concrete class which act as a virtual cart to store the items temporarily.
It provides all the required operations a cart should have such as:
- addToCart()
- removeFromCart()
- getProduct(), etc…
It also maintains a cartItems list with a type Product, similar to the products list in products class.
The sole purpose of cartItems
list is to store the purchased item in the cart or remove the item from the cart. It simply maintains the list of items which are added to the cart by the user.
UI.java
In the web application, you will have a nice looking HTML page with Javascript support. So the user will simply look for the product and click on the Add To Cart button.
In the console application (like this one), UI parts become a bit trickier. But, I’ve got a really cool way to make it easy.
Look:
In the console, a user can input only one input at a time. This is the key concept and could be used to make the UI easy.
People often take different input variables for different inputs. That could become a headache if there are tons of input to process.
That is why the simplest approach is to go with a single input variable and process it as soon as it gets populated.
In this application, I have used a single class variable to take user input. And based on the input value respective process will be executed.
Go through the code below and understand the concept.
This is the class where the main interaction between the user and application takes place.
It is the control point of the application.
Everything that you see in the console is a result of this page.
It takes the user input and calls the respective methods from the classes you made earlier to perform the required task.
Take a look at the code and come back if you have any question. I’m always here to answer.
Main.java
This is simply the starting point for the application.
It calls the constructor of UI() from the main method which takes care of bootstrapping the entire application.
Conclusion
Your Shopping Cart application is fully working at this point in time.
I hope the use of the collection is clear. If there is any doubt or problem then you may contact me directly by commenting below.
For simplicity, I have only used ArrayList, however, you may use any other data structure as per the need of the application. I suggest you follow the KISS principle every time you are given a project.
Let me know if you need to learn any other application from real world. I would be more than happy to do it.