Pola Desain

Selamat datang di kelas Pola Desain!

## Creational Pattern

### Singleton

Singleton pattern is one of the simplest design patterns in Java. This type of design
pattern comes under creational pattern as this pattern provides one of the best
ways to create an object.
This pattern involves a single class which is responsible to create an object while
making sure that only single object gets created. This class provides a way to
access its only object which can be accessed directly without instantiating the
object of the class.

### Factory

Factory pattern is one of most used design patterns in Java. This type of design
pattern comes under creational pattern as this pattern provides one of the best
ways to create an object.
In Factory pattern, we create objects without exposing the creation logic to the
client and refer to newly created object using a common interface.

### Abstract Factory

Abstract Factory patterns work around a super-factory which creates other
factories. This factory is also called as factory of factories. This type of design
pattern comes under creational pattern as this pattern provides one of the best
ways to create an object.
In Abstract Factory pattern, an interface is responsible for creating a factory of
related objects without explicitly specifying their classes. Each generated factory
can give the objects as per the Factory pattern.

## Structural Pattern

### Facade

Facade pattern hides the complexities of the system and provides an interface to
the client using which the client can access the system. This type of design pattern
comes under structural pattern as this pattern adds an interface to existing system
to hide its complexities.
This pattern involves a single class which provides simplified methods required by
client and delegates calls to methods of existing system classes.

### Decorator

Decorator pattern allows a user to add new functionality to an existing object
without altering its structure. This type of design pattern comes under structural
pattern as this pattern acts as a wrapper to existing class.
This pattern creates a decorator class which wraps the original class and provides
additional functionality keeping class methods signature intact.
We are demonstrating the use of decorator pattern via following example in which
we will decorate a shape with some color without alter shape class.

### Composite

Composite pattern is used where we need to treat a group of objects in similar
way as a single object. Composite pattern composes objects in term of a tree
structure to represent part as well as whole hierarchy. This type of design pattern
comes under structural pattern as this pattern creates a tree structure of a group
of objects.
This pattern creates a class that contains a group of its own objects. This class
provides ways to modify its group of same objects.
We are demonstrating use of composite pattern via following example in which we
will show employees hierarchy of an organization.

## Behavioural Pattern

### Strategy

In Strategy pattern, a class behavior or its algorithm can be changed at run time.
This type of design pattern comes under behavior pattern.
In Strategy pattern, we create objects which represent various strategies and a
context object whose behavior varies as per its strategy object. The strategy
object changes the executing algorithm of the context object.

### Command

Command pattern is a data driven design pattern and falls under behavioral
pattern category. A request is wrapped under an object as command and passed
to invoker object. Invoker object looks for the appropriate object which can handle
this command and passes the command to the corresponding object which
executes it.

### Memento

Memento pattern is used to restore state of an object to a previous state. Memento
pattern falls under behavioral pattern category.

## Referensi

Tutorialspoint Design Pattern - https://www.tutorialspoint.com/design\_pattern/design\_pattern\_tutorial.pdf

Java Design Pattern Blog - http://javadesign-patterns.blogspot.co.id/

Journaldev Java Design Pattern - https://www.journaldev.com/1827/java-design-patterns-example-tutorial