Object-Oriented system design i.e sketch out the classes and methods to implement technical problems or real-life objects.
- Make assumptions or, ask clarifying questions.
- Go through "six W's": who, what, where, when, how, why.
Suppose we are asked to do the object-oriented design for a restaurant. Our core objects might be things like Table, Guest, Party, Order, Meal, Employee, Server, and Host etc.
Ask questions like...
Which objects are members of which other objects?
Do any objects inherit from any others?
Are relationships one-to-many or many-to-many?
For example, Restaurant design:
- Party should have an array of Guests.
- Server and Host inherit from Employee.
- Each Table has one Party, but each Party may have multiple Tables.
- There is one Host for the Restaurant.
At this point, we have the basic outline of the object-oriented design. Now, we have to consider key actions that the objects will take and how they relate to each other. Add and update some forgotten objects, if possible.
The singleton pattern ensures that a class has only one instance and ensures access to the instance through the application.
OR The singleton pattern is a design pattern that restricts the instantiation of a class to one object.
Example:
public class Restaurant
{
private static Restaurant _instance = null;
protected Restaurant() { .... }
public static Restaurant getInstance()
{
if(_instance == null)
_instance = new Restaurant();
return _instance;
}
}
The Factory Method offers an interface for creating an instance of a class, with its sub-classes deciding which class to instantiate.
Example:
public class CardGame
{
public static CardGame createCardGame(GameType type)
{
if(type == GameType.Poker)
return new PokerGame();
else if(type == GameType.BlackJack)
return new BlackJackGame();
return null;
}
}