Friday, December 27, 2013

OO design for a coffee shop



Let us do the design for a coffee shop today. Let me start with the description of how the coffee shop we want to design works first. There are three different actors in our scenario and i have listed the different actions they do also below

* Customer
  - Pays the cash to the cashier and places his order, get a token number back
  - Waits for the intimation that order for his token is ready
  - Upon intimation/notification he collects the coffee and enjoys his drink
  ( Assumption:  Customer waits till the coffee is done, he wont timeout and cancel the order. Customer always likes the drink served. Exceptions like he not liking his coffee, he getting wrong coffee are not considered to keep the design simple.)

* Cashier
  - Takes an order and payment from the customer
  - Upon payment, creates an order and places it into the order queue
  - Intimates the customer that he has to wait for his token and gives him his token
  ( Assumption: Token returned to the customer is the order id. Order queue is unlimited. With a simple modification, we can design for a limited queue size)

* Barista
 - Gets the next order from the queue
 - Prepares the coffee
 - Places the coffee in the completed order queue
 - Places a notification that order for token is ready





object oriented design for coffee shop
Coffee Shop Class diagram
Above is the class diagram for the above description of the Coffee shop. Notice that the order processing is done in an asynchronous way. Customer places the order and goes to some table and reads newspaper/checks his mails etc. Once the order is done, he is intimated about the order ready via an announcement (or even smart way is sending a sms, as you have taken his contact number). From an implementation perspective these asynchronous communication can be handled using JMS

Please take a look Restaurant Design once you are done here. The restaurant is slightly different from the coffee shop in which it has a waiter to handle all your needs. Please leave your comments.

3 comments:

  1. This comment has been removed by the author.

    ReplyDelete
  2. Here the identification of common classes and their relationship is well explained. How about using builder pattern to preparing a order and using abstract factory to create various objects. Like we can have a factory which will give cold or hot coffee and using builder pattern we can create a combo etc.. Please suggest.

    ReplyDelete
  3. We are a quality conscious parts manufacturer, based in Narol area of Ahmedabad, Gujarat, India. We manufacture un-machined and machined grey cast iron castings from 200 grams to 120 kilograms.
    We have a full fledged machine shop having CNC lathes and vertical machining centres for precision machining of parts from various types of engineering materials like CI, alloy steels, stainless steel, engineering plastics, non ferrous metals.
    Elevator Parts manufacturing in Ahmedabad

    ReplyDelete