# Structural Patterns

> Every term in this category is listed as one record, with its kind, its definition and its aliases, the principles whose relations name it, the principle or…

Page: Ontology · Lexicon
Canonical: https://banes-lab.com/ontology/lexicon#lex-category-structural-patterns

Every term in this category is listed as one record, with its kind, its definition and its aliases, the principles whose relations name it, the principle or contract that carries the same name where one exists, and the layer its category belongs to.

### Cartesian Inheritance Explosion

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Category: [Structural Patterns](https://banes-lab.com/ontology/lexicon/lex-category-structural-patterns.md)
- Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)

Details

Definition
Modeling every combination of two independent dimensions as its own subclass, so the class count grows multiplicatively.

Referenced by
[Bridge Pattern](https://banes-lab.com/records/arch/bridge-pattern.md)

### Common Interface

- Kind: [constraint](https://banes-lab.com/records/kind/constraint.md)
- Category: [Structural Patterns](https://banes-lab.com/ontology/lexicon/lex-category-structural-patterns.md)
- Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)

Details

Definition
The requirement that a wrapper and the object it wraps share one interface so they remain interchangeable.

Referenced by
[Decorator Pattern](https://banes-lab.com/records/arch/decorator-pattern.md)

### Direct Access

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Category: [Structural Patterns](https://banes-lab.com/ontology/lexicon/lex-category-structural-patterns.md)
- Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)

Details

Definition
Reaching a resource directly with no intermediary, bypassing the access control, caching, or laziness a proxy would add.

Referenced by
[Proxy Pattern](https://banes-lab.com/records/arch/proxy-pattern.md)

### Direct External Coupling

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Category: [Structural Patterns](https://banes-lab.com/ontology/lexicon/lex-category-structural-patterns.md)
- Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)

Details

Definition
Coupling code directly to an incompatible external interface, spreading its idiosyncrasies through the codebase.

Referenced by
[Adapter Pattern](https://banes-lab.com/records/arch/adapter-pattern.md)

### High-Cardinality Object Reuse

- Kind: [capability](https://banes-lab.com/records/kind/capability.md)
- Category: [Structural Patterns](https://banes-lab.com/ontology/lexicon/lex-category-structural-patterns.md)
- Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)

Details

Definition
The ability to represent large numbers of similar objects economically by sharing their common intrinsic state.

Referenced by
[Flyweight Pattern](https://banes-lab.com/records/arch/flyweight-pattern.md)

### Implementation Swap

- Kind: [capability](https://banes-lab.com/records/kind/capability.md)
- Category: [Structural Patterns](https://banes-lab.com/ontology/lexicon/lex-category-structural-patterns.md)
- Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)

Details

Definition
The ability to change an abstraction's underlying implementation without altering the abstraction itself.

Referenced by
[Bridge Pattern](https://banes-lab.com/records/arch/bridge-pattern.md)

### Incompatible Interfaces

- Kind: [constraint](https://banes-lab.com/records/kind/constraint.md)
- Category: [Structural Patterns](https://banes-lab.com/ontology/lexicon/lex-category-structural-patterns.md)
- Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)

Details

Definition
A precondition of two interfaces that must cooperate yet expose mismatched signatures.

Referenced by
[Adapter Pattern](https://banes-lab.com/records/arch/adapter-pattern.md)

### Independent Variation Axes

- Kind: [constraint](https://banes-lab.com/records/kind/constraint.md)
- Category: [Structural Patterns](https://banes-lab.com/ontology/lexicon/lex-category-structural-patterns.md)
- Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)

Details

Definition
The requirement that an abstraction and its implementation vary along separate axes so they can be decoupled.

Referenced by
[Bridge Pattern](https://banes-lab.com/records/arch/bridge-pattern.md)

### Indirection

- Kind: [quality-attribute](https://banes-lab.com/records/kind/quality-attribute.md)
- Category: [Structural Patterns](https://banes-lab.com/ontology/lexicon/lex-category-structural-patterns.md)
- Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)

Details

Definition
The degree of extra indirection introduced by separating an abstraction from its implementation.

Referenced by
[Bridge Pattern](https://banes-lab.com/records/arch/bridge-pattern.md)

### Lazy Load

- Kind: [capability](https://banes-lab.com/records/kind/capability.md)
- Category: [Structural Patterns](https://banes-lab.com/ontology/lexicon/lex-category-structural-patterns.md)
- Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)

Details

Definition
The ability to defer creating or loading a costly resource until it is first used.

Referenced by
[Proxy Pattern](https://banes-lab.com/records/arch/proxy-pattern.md)

### Leaf-vs-Container Special-Casing

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Category: [Structural Patterns](https://banes-lab.com/ontology/lexicon/lex-category-structural-patterns.md)
- Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)

Details

Definition
Branching client code on whether an element is a leaf or a container instead of treating them through one interface.

Referenced by
[Composite Pattern](https://banes-lab.com/records/arch/composite-pattern.md)

### Leaf/Composite Transparency

- Kind: [capability](https://banes-lab.com/records/kind/capability.md)
- Category: [Structural Patterns](https://banes-lab.com/ontology/lexicon/lex-category-structural-patterns.md)
- Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)

Details

Definition
The ability to treat individual objects and compositions of objects through one uniform interface.

Referenced by
[Composite Pattern](https://banes-lab.com/records/arch/composite-pattern.md)

### Leaky Subsystem API

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Category: [Structural Patterns](https://banes-lab.com/ontology/lexicon/lex-category-structural-patterns.md)
- Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)

Details

Definition
Exposing a subsystem's internal complexity directly to clients instead of hiding it behind a simplifying interface.

Referenced by
[Facade Pattern](https://banes-lab.com/records/arch/facade-pattern.md)

### Over-Centralization

- Kind: [quality-attribute](https://banes-lab.com/records/kind/quality-attribute.md)
- Category: [Structural Patterns](https://banes-lab.com/ontology/lexicon/lex-category-structural-patterns.md)
- Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)

Details

Definition
The degree to which routing all access through one facade concentrates responsibility and can bottleneck change.

Referenced by
[Facade Pattern](https://banes-lab.com/records/arch/facade-pattern.md)

### Per-Instance Duplicate State

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Category: [Structural Patterns](https://banes-lab.com/ontology/lexicon/lex-category-structural-patterns.md)
- Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)

Details

Definition
Storing identical shared state separately in every object instance, wasting memory at high object counts.

Referenced by
[Flyweight Pattern](https://banes-lab.com/records/arch/flyweight-pattern.md)

### Recursive Composition

- Kind: [capability](https://banes-lab.com/records/kind/capability.md)
- Category: [Structural Patterns](https://banes-lab.com/ontology/lexicon/lex-category-structural-patterns.md)
- Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)

Details

Definition
The ability to build tree structures in which composites contain other composites to arbitrary depth.

Referenced by
[Composite Pattern](https://banes-lab.com/records/arch/composite-pattern.md)

### Remote Stub

- Kind: [mechanism](https://banes-lab.com/records/kind/mechanism.md)
- Category: [Structural Patterns](https://banes-lab.com/ontology/lexicon/lex-category-structural-patterns.md)
- Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)

Details

Definition
A local stand-in object that forwards calls to an object living in another process or machine.

Referenced by
[Proxy Pattern](https://banes-lab.com/records/arch/proxy-pattern.md)

### Runtime Behavior Extension

- Kind: [capability](https://banes-lab.com/records/kind/capability.md)
- Category: [Structural Patterns](https://banes-lab.com/ontology/lexicon/lex-category-structural-patterns.md)
- Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)

Details

Definition
The ability to add responsibilities to an object dynamically at runtime by wrapping it.

Referenced by
[Decorator Pattern](https://banes-lab.com/records/arch/decorator-pattern.md)

### Separable Intrinsic State

- Kind: [constraint](https://banes-lab.com/records/kind/constraint.md)
- Category: [Structural Patterns](https://banes-lab.com/ontology/lexicon/lex-category-structural-patterns.md)
- Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)

Details

Definition
The requirement that an object's shared, context-independent state be separable from its per-use state.

Referenced by
[Flyweight Pattern](https://banes-lab.com/records/arch/flyweight-pattern.md)

### Shared Immutable State

- Kind: [capability](https://banes-lab.com/records/kind/capability.md)
- Category: [Structural Patterns](https://banes-lab.com/ontology/lexicon/lex-category-structural-patterns.md)
- Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)

Details

Definition
The ability to safely share one immutable state object across many contexts at once.

Referenced by
[Flyweight Pattern](https://banes-lab.com/records/arch/flyweight-pattern.md)

### Simplified Access

- Kind: [capability](https://banes-lab.com/records/kind/capability.md)
- Category: [Structural Patterns](https://banes-lab.com/ontology/lexicon/lex-category-structural-patterns.md)
- Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)

Details

Definition
The ability to use a complex subsystem through a small, convenient interface.

Referenced by
[Facade Pattern](https://banes-lab.com/records/arch/facade-pattern.md)

### Stack Debugging

- Kind: [quality-attribute](https://banes-lab.com/records/kind/quality-attribute.md)
- Category: [Structural Patterns](https://banes-lab.com/ontology/lexicon/lex-category-structural-patterns.md)
- Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)

Details

Definition
The degree to which layers of wrapping deepen the call stack and complicate debugging.

Referenced by
[Decorator Pattern](https://banes-lab.com/records/arch/decorator-pattern.md)

### Subclass Explosion

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Category: [Structural Patterns](https://banes-lab.com/ontology/lexicon/lex-category-structural-patterns.md)
- Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)

Details

Definition
Creating a distinct subclass for every combination of optional features instead of composing them at runtime.

Referenced by
[Decorator Pattern](https://banes-lab.com/records/arch/decorator-pattern.md)

### Subsystem Complexity

- Kind: [quality-attribute](https://banes-lab.com/records/kind/quality-attribute.md)
- Category: [Structural Patterns](https://banes-lab.com/ontology/lexicon/lex-category-structural-patterns.md)
- Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)

Details

Definition
The degree of internal complexity in a subsystem that motivates hiding it behind a facade.

Referenced by
[Facade Pattern](https://banes-lab.com/records/arch/facade-pattern.md)

### Transparency / Debugging

- Kind: [quality-attribute](https://banes-lab.com/records/kind/quality-attribute.md)
- Category: [Structural Patterns](https://banes-lab.com/ontology/lexicon/lex-category-structural-patterns.md)
- Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)

Details

Definition
The degree to which interposing a proxy hides the real object and complicates tracing calls to it.

Referenced by
[Proxy Pattern](https://banes-lab.com/records/arch/proxy-pattern.md)

### Uniform Component Interface

- Kind: [constraint](https://banes-lab.com/records/kind/constraint.md)
- Category: [Structural Patterns](https://banes-lab.com/ontology/lexicon/lex-category-structural-patterns.md)
- Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)

Details

Definition
The requirement that leaves and composites implement one shared interface so clients treat them alike.

Referenced by
[Composite Pattern](https://banes-lab.com/records/arch/composite-pattern.md)

## Links to

- [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)
- [Bridge Pattern](https://banes-lab.com/records/arch/bridge-pattern.md)
- [constraint](https://banes-lab.com/records/kind/constraint.md)
- [Decorator Pattern](https://banes-lab.com/records/arch/decorator-pattern.md)
- [Proxy Pattern](https://banes-lab.com/records/arch/proxy-pattern.md)
- [Adapter Pattern](https://banes-lab.com/records/arch/adapter-pattern.md)
- [capability](https://banes-lab.com/records/kind/capability.md)
- [Flyweight Pattern](https://banes-lab.com/records/arch/flyweight-pattern.md)
- [quality-attribute](https://banes-lab.com/records/kind/quality-attribute.md)
- [Composite Pattern](https://banes-lab.com/records/arch/composite-pattern.md)
- [Facade Pattern](https://banes-lab.com/records/arch/facade-pattern.md)
- [mechanism](https://banes-lab.com/records/kind/mechanism.md)
