Use OOAD to connect low-level class design with higher-level system boundaries and long-term maintainability.
OOAD & Architecture gives JavaOmnibus a design lens, not just a version lens.
This section complements the Java language, JLS, JVM, and JDK pages by focusing on how we shape systems: responsibilities, boundaries, layers, design patterns, enterprise patterns, and the practical choices that make Java systems easier to understand and evolve.
Patterns are most useful when they are tied to clear tradeoffs, not memorized as a catalog of names.
The examples here use Java-style services, repositories, controllers, and domain boundaries rather than abstract pseudocode.
Start with OOAD concepts and architecture principles
Before pattern catalogs, it helps to ground the design work in responsibility assignment, cohesion, coupling, layered boundaries, dependency direction, and the difference between analysis and design.
Gang of Four patterns
These pages focus on the intent behind each pattern, where it fits, what tradeoffs it brings, and how a Java implementation can look in practice.
Creational
Create related objects without hard-coding their concrete classes.
Read more Creational BuilderAssemble complex objects step by step with readable construction logic.
Read more Creational Factory MethodLet subclasses decide which concrete product to create.
Read more Creational PrototypeCreate new objects by copying an existing configured instance.
Read more Creational SingletonEnsure only one instance exists for a shared service or coordinator.
Read moreStructural
Translate one interface into another that the client expects.
Read more Structural BridgeSeparate abstraction from implementation so both can vary independently.
Read more Structural CompositeTreat individual objects and groups uniformly in tree-like structures.
Read more Structural DecoratorAdd behavior to an object dynamically without changing its core type.
Read more Structural FacadeProvide a simpler entry point to a complicated subsystem.
Read more Structural FlyweightShare intrinsic state so many similar objects use less memory.
Read more Structural ProxyStand in for another object to control access or add indirection.
Read moreBehavioral
Pass a request through handlers until one processes it.
Read more Behavioral CommandEncapsulate an action as an object.
Read more Behavioral InterpreterRepresent and evaluate a small language or expression grammar.
Read more Behavioral IteratorTraverse a collection without exposing its internal structure.
Read more Behavioral MediatorCentralize complex interactions between collaborators.
Read more Behavioral MementoCapture and restore object state without exposing internals.
Read more Behavioral ObserverNotify dependents automatically when state changes.
Read more Behavioral StateChange behavior by switching state objects instead of conditionals.
Read more Behavioral StrategySwap algorithms behind a stable interface.
Read more Behavioral Template MethodDefine the workflow skeleton and let subclasses fill in specific steps.
Read more Behavioral VisitorAdd operations across a structure without changing element classes.
Read moreJ2EE patterns
These patterns lean toward presentation flow, business-service coordination, integration boundaries, and classic enterprise Java structuring decisions that still influence modern systems.
Presentation
Run reusable request processing steps before the core handler.
Read more Presentation Front ControllerRoute all web requests through one central entry point.
Read more Presentation View HelperKeep presentation-specific formatting and lookup logic near the view layer.
Read more Presentation Composite ViewAssemble a page from reusable view fragments.
Read more Presentation Dispatcher ViewUse a controller to gather model data, then forward to a rendering view.
Read more Presentation Service to WorkerCentralize control flow, invoke business services, then forward to a view.
Read more Presentation Application ControllerChoose commands and views based on application-level navigation rules.
Read moreBusiness
Integration
Encapsulate persistence logic behind a focused data-access interface.
Read more Integration Transfer ObjectMove grouped data across layers in one serializable package.
Read more Integration Transfer Object AssemblerBuild richer transfer objects from multiple domain sources.
Read more Integration Value List HandlerManage large result lists with paging and efficient navigation.
Read more Integration Context ObjectBundle request-scoped data so collaborators can share execution context cleanly.
Read more Integration Composite EntityRepresent a coarse-grained entity composed of dependent persistent parts.
Read more Integration Web Service BrokerShield the application from external web-service protocol details.
Read more