Arrange/Act/Assert

Also known as

Given/When/Then

Intent

Arrange/Act/Assert (AAA) is a pattern for organizing unit tests. It breaks tests down into three clear and distinct steps:

  1. Arrange: Perform the setup and initialization required for the test.
  2. Act: Take action(s) required for the test.
  3. Assert: Verify the outcome(s) of the test.

iluwatarIdiomTestingAbout 2 min
Callback

Intent

Callback is a piece of executable code that is passed as an argument to other code, which is expected to call back (execute) the argument at some convenient time.

Explanation

Real world example

We need to be notified after executing task has finished. We pass a callback method for the executor and wait for it to call back on us.


iluwatarIdiomReactiveLess than 1 minute
Collecting Parameter

Name

Collecting Parameter

Intent

To store the collaborative result of numerous methods within a collection.

Explanation

Real-world example

Within a large corporate building, there exists a global printer queue that is a collection of all the printing jobs that are currently pending. Various floors contain different models of printers, each having a different printing policy. We must construct a program that can continually add appropriate printing jobs to a collection, which is called the collecting parameter.


iluwatarIdiomGenericAbout 3 min
Combinator

Also known as

Composition pattern

Intent

The functional pattern representing a style of organizing libraries centered around the idea of combining functions. Putting it simply, there is some type T, some functions for constructing “primitive” values of type T, and some “combinators” which can combine values of type T in various ways to build up more complex values of type T.


iluwatarIdiomReactiveAbout 3 min
Double Checked Locking

Intent

Reduce the overhead of acquiring a lock by first testing the locking criterion (the "lock hint") without actually acquiring the lock. Only if the locking criterion check indicates that locking is required does the actual locking logic proceed.

Class diagram


iluwatarIdiomPerformanceLess than 1 minute
Double Dispatch

Intent

Double Dispatch pattern is a way to create maintainable dynamic behavior based on receiver and parameter types.

Class diagram

Applicability

Use the Double Dispatch pattern when

  • the dynamic behavior is not defined only based on receiving object's type but also on the receiving method's parameter type.

iluwatarIdiomExtensibilityLess than 1 minute
Execute Around

Intent

Execute Around idiom frees the user from certain actions that should always be executed before and after the business method. A good example of this is resource allocation and deallocation leaving the user to specify only what to do with the resource.

Explanation

Real-world example


iluwatarIdiomExtensibilityAbout 1 min
Lazy Loading

Intent

Lazy loading is a design pattern commonly used to defer initialization of an object until the point at which it is needed. It can contribute to efficiency in the program's operation if properly and appropriately used.

Class diagram

Applicability

Use the Lazy Loading idiom when


iluwatarIdiomPerformanceLess than 1 minute
Mute Idiom

Intent

Provide a template to suppress any exceptions that either are declared but cannot occur or should only be logged; while executing some business logic. The template removes the need to write repeated try-catch blocks.

Class diagram

Applicability


iluwatarIdiomDecouplingLess than 1 minute
Private Class Data

Intent

Private Class Data design pattern seeks to reduce exposure of attributes by limiting their visibility. It reduces the number of class attributes by encapsulating them in single Data object.

Explanation

Real world example

Imagine you are cooking a stew for your family for dinner. You want to prevent your family members from consuming the stew by tasting it while you are cooking, otherwise there will be no more stew for dinner later.


iluwatarIdiomData accessAbout 2 min
2