Knowledge Library

Software Engineering Concepts

Explore software architecture, design patterns, system design and engineering fundamentls.

Design Patterns

Design Patterns11 min

Singleton Pattern

Understand the creational pattern that restricts a class to one instance within a defined application scope and provides a shared access point.

CreationalJavaOOPInstance Control
BeginnerRead article →
Design Patterns13 min

Factory Method Pattern

Delegate the creation of a product to creator implementations so client code depends on abstractions rather than concrete constructors.

CreationalJavaPolymorphismOOP
IntermediateRead article →
Design Patterns18 min

Builder Pattern

Construct complex objects step by step with readable configuration, optional parameters and validation before the completed object is returned.

CreationalJavaObject ConstructionImmutability
IntermediateRead article →
Design Patterns16 min

Adapter Pattern

Make incompatible interfaces work together by translating the interface expected by the client into calls understood by an existing component.

StructuralJavaCompositionIntegration
IntermediateRead article →
Design Patterns17 min

Bridge Pattern

Decouple an abstraction from its implementation so both hierarchies can vary independently without a combinatorial explosion of subclasses.

StructuralJavaCompositionExtensibility
AdvancedRead article →
Design Patterns15 min

Composite Pattern

Represent part-whole hierarchies as trees and let clients treat individual objects and groups through one common interface.

StructuralJavaTree StructureComposition
IntermediateRead article →
Design Patterns17 min

Decorator Pattern

Attach responsibilities to an individual object dynamically by wrapping it with objects that implement the same interface.

StructuralJavaCompositionOpen/Closed Principle
IntermediateRead article →
Design Patterns14 min

Facade Pattern

Provide a unified, higher-level interface to a complex subsystem while keeping subsystem coordination behind a simpler entry point.

StructuralJavaEncapsulationSubsystems
BeginnerRead article →
Design Patterns17 min

Flyweight Pattern

Reduce memory usage by sharing reusable intrinsic state across many fine-grained objects and passing context-specific extrinsic state when operations are performed.

StructuralJavaMemoryObject Sharing
AdvancedRead article →
Design Patterns17 min

Proxy Pattern

Place a surrogate in front of a real object to control access and add behaviour such as security checks, lazy initialisation, caching or remote communication.

StructuralJavaAccess ControlLazy Loading
IntermediateRead article →