The idea of classes goes back long before Plato. The platonic solids were classes, instances of which could be seen in the world. The platonic sphere was absolutely perfect but insubstantial. The spheres around us we could touch, but they were all imperfect in some way.
Object-oriented programming picked up on this idea by way of later western philosophers, dividing programs into classes, which are general descriptions of a whole set of similar things, and objects, which are the things themselves.
Classes are important for communication because they describe, potentially, many specific things. Class-level patterns have the largest span of any of the implementation patterns. Design patterns, by contrast, generally talk about the relationships between classes.
The following patterns appear in this chapter:
Use a class to say, “This data goes together and this logic goes with it.”
- Simple Superclass Name
Name the roots of class hierarchies with simple names drawn from the same metaphor.
- Qualified Subclass Name
Name subclasses to communicate the similarities and differences with a superclass.
- Abstract Interface
Separate the interface from the implementation.
Specify an abstract interface which doesn’t change often with a Java interface.
- Abstract Class
Specify an abstract interface which will likely change with an abstract class.
- Versioned Interface
Extend interfaces safely by introducing a new sub-interface.
- Value Object
Write an object that acts like a mathematical value.
Clearly express the similarities and differences of related computations.
Express one-dimensional variation with a subclass.
Override a method to express a variant of a computation.
- Inner Class
Bundle locally useful code in a private class.
- Instance-specific Behavior
Vary logic by instance.
Vary logic by explicit conditionals.
Vary logic by delegating to one of several types of objects.
- Pluggable Selector
Vary logic by reflectively executing a method.
- Anonymous Inner Class
Vary logic by overriding one or two methods right in the method that is creating a new object.
- Library Class
Represent a bundle of functionality that doesn’t fit into any object as a set of static methods.
|This work is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License|