UML软件工程组织

Overview of Design Patterns
What follows are synopses for the design patterns that appear in my book
Patterns in Java Volume 1: A Catalog of Reusable Design Patterns Illustrated with UML
Click here for an overview of Volume 2 . Click here for an overview of Volume 3 .
Order Volume 1
There is now an errata list for Volume 1 .
The 41 patterns in volume 1 are organized into categories as shown in the following table:

Fundamental Design Patterns Delegation
Interface
Proxy
Immutable
Marker Interface Download Visio 5.0 Drawings
Creational Patterns Abstract Factory
Builder
Factory Method
Prototype
Singleton
Object Pool Download Visio 5.0 Drawings
Partitioning Patterns Layered Initialization
Filter
Composite Download Visio 5.0 Drawings
Structural Patterns Adapter
Iterator
Bridge
Fa?ade
Flyweight
Dynamic Linkage
Virtual Proxy
Decorator
Cache Management Download Visio 5.0 Drawings
Behavioral Patterns Chain of Responsibility
Command
Little Language / Interpreter
Mediator
Snapshot
Observer
State
Null Object
Strategy
Template Method
Visitor Download Visio 5.0 Drawings
Concurrency Patterns Single Threaded Execution
Guarded Suspension
Balking
Scheduler
Read/Write Lock
Producer-Consumer
Two-Phase Termination Download Visio 5.0 Drawings

If you have any suggestions about this page or would like to discuss a pattern with its author, send e-mail to mgrand@mindspring.com .
--------------------------------------------------------------------------------

Fundamental Design Patterns
Delegation (When not to use Inheritance)
Delegation is a way of extending and reusing a class by writing another class with additional functionality that uses instances of the original class to provide the original functionality.
Interface
Keep a class that uses data and services provided by instances of other classes independent of those classes by having it access those instances through an interface.
Related patterns are

Delegation
The Delegation and Interface patterns are often used together.
Immutable
The Immutable pattern increases the robustness of objects that share references to the same object and reduces the overhead of concurrent access to an object. It accomplishes this by not allowing an object’s state information to change after it is constructed. The Immutable pattern also avoids the need to synchronize multiple threads of execution that share an object.
Related patterns are

Single Threaded Execution
The Single Threaded Execution pattern is the pattern most frequently used to coordinate access by multiple threads to a shared object. The Immutable object pattern can be used to avoid the need for the Single Threaded Execution pattern or any other kind of access coordination.
Marker Interface
The Marker Interface pattern uses interfaces that declare no methods or variables to indicate semantic attributes of a class. It works particularly well with utility classes that must determine something about objects without assuming they are an instance of any particular class.
Related patterns are

Snapshot
The Marker Interface pattern is used as part of the Snapshot pattern to allow serialization of objects.
Proxy
The Proxy pattern forces method calls to an object to occur indirectly through a proxy object that acts as a surrogate for the other object, delegating method calls to that object. Classes for proxy objects are declared in a way that usually eliminates client object’s awareness that they are dealing with a proxy. Proxy is a very general pattern that occurs in many other patterns, but never by itself in its pure form.
Related patterns are

Access Proxy
The Access Proxy pattern uses a proxy to enforce a security policy on access to a service providing object.

Fa?ade
The Fa?ade pattern uses a single object as a front end to a set of interrelated objects.

Remote Proxy
The Remote Proxy pattern uses a proxy to hide the fact that a service object is located on a different machine than the client objects that want to use it.

Virtual Proxy
This pattern uses a proxy to create the illusion that a service providing object exists before it has actually been created. It is useful if the object is expensive to create and its services may not be needed.

Decorator
The Decorator pattern is structurally similar to the Proxy pattern in that it forces access to a service providing object to be done indirectly through another object. The difference is a matter of intent. Instead of trying to manage the service, the indirection object in some way enhances the service.

--------------------------------------------------------------------------------

Creational Patterns
Abstract Factory
Given a set of related abstract classes, the Abstract Factory pattern provides a way to create instances of those abstract classes from a matched set of concrete subclasses. The Abstract Factory pattern is useful for allowing a program to work with a variety of complex external entities such as different windowing systems with similar functionality.
Related patterns are

Factory Method
The Abstract Factory may uses the Factory Method pattern.

Singleton
Concrete Factory classes are usually implemented as Singleton classes.
Builder
The Builder pattern allows a client object to construct a complex object by specifying only its type and content. The client is shielded from the details of the object’s construction.
Related patterns are

Interface
The Builder pattern uses the Interface pattern to hide the actual class of the object it builds.

Composite
The object built using the Builder pattern is typically a Composite.

Factory Method
The Builder pattern uses the Factory Method pattern to decide which concrete class to instantiate to build the desired type of object.

Layered Initialization
The Builder pattern uses the Layered Initialization pattern to create objects that build the desired type of object.

Null Object
The Null Object pattern may be used by the Builder pattern to provide “do nothing” implementations of methods.

Visitor
The Visitor pattern allows the creation requesting object to be more closely coupled to the construction of the new complex object. Instead of describing the content of the objects to be built through a series of method calls, the information is presented in bulk as a complex data structure.
Factory Method
You write a class for reuse with arbitrary data types. You organize this class so that it can instantiate other classes without being dependent on any of the classes it instantiates. The reusable class is able to remain independent of the classes it instantiates by it can delegatinge the choice of which class to instantiate to another object and referring to the newly created object through a common interface.
Related patterns are

Abstract Factory
The Factory Method pattern is useful for constructing individual objects for a specific purpose without the construction requester knowing the specific classes being instantiated. If you need to create a matched set of such objects, then the Abstract Factory pattern is a more appropriate pattern.

Template Method
The Factory Method pattern is often used with the Template Method pattern.

Prototype
The Prototype pattern provides an alternate way for an object to work with other objects without knowing the details of their construction.
Prototype
The Prototype pattern allows an object to create customized objects without knowing their class or any details of how to create them. It works by giving prototypical objects to an object that initiates object creation. The creation initiating object then creates objects by asking the prototypical objects to make copies of themselves.
Related patterns are

Composite
The Prototype pattern is often used with the Composite pattern. Prototypical objects are often composite objects.

Abstract Factory
The Abstract Factory pattern can be a good alternative to the Prototype pattern if there is no need for the dynamic changes that the Prototype pattern allows to a palette of prototypical objects.

Fa?ade
The class that manages a collection of prototypical objects commonly acts as fa?ade that separates the other classes that participate in the Prototype pattern from the rest of the program.

Factory Method
The Factory Method pattern may be an alternative to the Prototype pattern when the palette of prototypical objects never contains more than one object.

Decorator
The Prototype pattern is often used with the Decorator pattern.
Singleton
The Singleton pattern ensures that only one instance of a class is created. All objects that use an instance of that class use the same instance.
You can use the Singleton pattern with many other patterns. In particular, it is often used with the Abstract Factory , Builder and Prototype patterns.

The Singleton pattern has some similarity to the Cache Management pattern. A Singleton is functionally similar to a Cache that only contains one object.

If multiple threads will be getting the instance of a singleton class, you can use the Double Checked Locking coding pattern to ensure that only one instance is created while avoiding the overhead of unnecessary thread synchronization after the instance is created.

Related patterns are

Shared Object
The Singleton pattern describes classes that have a single instance that may or may not be shared. The Shared Object pattern describes objects that are shared and may have multiple instances.

Object Pool
Manage the reuse of objects for a type of object that is expensive to create or only a limited number of a kind of object can be created.
Related patterns are

Cache Management
The Cache Management pattern manages the reuse of specific instances of a class. The Object Pool pattern manages and creates instances of a class that can be used interchangeably.

Factory Method
The Factory Method pattern can be used to encapsulate the creation logic for objects. However, it does not manage them after their creation.

Singleton
Objects that manage object pools are usually singletons.

--------------------------------------------------------------------------------

Partitioning Patterns
Layered Initialization
When you need multiple implementations of an abstraction, you usually define a class to encapsulate common logic and subclasses to encapsulate different specialized logic. That does not work when common logic must be used to decide which specialized subclass to create. The Layered Initialization pattern solves this problem by encapsulating the common and specialized logic to create an object in unrelated classes.
Related patterns are

Builder
The Builder pattern uses the Layered Initialization pattern to create a specialized object for representing data in a specific form.

Fa?ade
The Layered Initialization pattern uses the Fa?ade pattern by hiding all of the other objects participating in the pattern from clients of service objects.

Factory Method
When the choice of which kind of object to create does not involve any significant preprocessing of data, the Factory Method pattern may be a better choice. The Layered Initialization pattern may use the Factory Method pattern after it has decided what kind of specialized logic is needed.

Layered Initialization
The Layered Initialization pattern recognizes a division of responsibilities into layers during design.

Composite
When more than two layers of initialization are needed for initialization you can combine the Layered Initialization pattern with the Composite pattern to perform initialization in as many layers as needed.
Filter
The Filter pattern allows objects that perform different transformations and computations on streams of data and have compatible interfaces to be dynamically connected to perform combinations of operations on streams of data.
Related patterns are

Composite
The Composite pattern can be an alternative to the Filter pattern when the objects involved do not have a consistent interface and they can be composed statically.

Layered Architecture
The Layered Architecture pattern (described in volume 2) is similar to the Filter pattern. The most important difference is that the objects involved in the layered Architecture pattern correspond to different levels of abstraction.

Decorator
The Filter pattern is a special case of the Decorator pattern, where a data source or data sink object is wrapped to add logic to the handling of a data stream.
Composite
The Composite pattern allows you to build complex objects by recursively composing similar objects in a tree-like manner. The Composite pattern also allows the objects in the tree to be manipulated in a consistent manner, by requiring all of the objects in the tree to have a common superclass or interface.
Related patterns are

Chain of Responsibility
The Chain of Responsibility pattern can be combined with the Composite pattern by adding child to parent links so that children can get information from an ancestor without having to know which ancestor the information came from.

High Cohesion
The High Cohesion pattern (described in volume 2) discourages putting specialized methods in general purpose classes, which is something that the Composite pattern encourages.

Visitor
You can use the Visitor pattern to encapsulate operations in a single class that would otherwise be spread across multiple classes.

--------------------------------------------------------------------------------

Structural Patterns
Adapter
An Adapter class implements an interface known to its clients and provides access to an instance of a class not know to its clients. An adapter object provides the functionality promised by an interface without having to assume what class is being used to implement that interface.
Related patterns are

Anonymous Adapter
This is a coding pattern that uses anonymous adapter objects to handle events.

Fa?ade
The Adapter class provides an object that acts as an intermediary for method calls between client objects and one other object not known to the client objects. The Fa?ade pattern provides an object that acts as an intermediary for method calls between client objects and multiple objects not know to the client objects.

Iterator
The Iterator pattern is a specialized form of the Adapter pattern for sequentially accessing the contents of collection objects.

Proxy
The Proxy pattern, like the Adapter pattern, uses an object that is a surrogate for another object. However, a Proxy object has the same interface as the object for which it is a surrogate.

Strategy
The Strategy pattern is structurally similar to the Adapter pattern. The difference is in the intent. The Adapter pattern allows a Client object to carry out its originally intended function in collaboration by calling method of objects the implement a particular interface. The Strategy pattern provides objects that implement a particular interface for the purpose of altering or determining the behavior of a Client object.
Iterator
The Iterator pattern defines an interface that declares methods for sequentially accessing the objects in a collection. A class that accesses a collection only through such an interface remains independent of the class that implements the interface.
Related patterns are

Adapter
The Iterator pattern is a specialized form of the Adapter pattern for sequentially accessing the contents of collection objects.

Factory Method
Some collection classes may use the Factory Method pattern to determine what kind of iterator to instantiate.

Null Object
Null iterators are sometimes used to implement the Null Object pattern.
Bridge
The Bridge pattern is useful when there is a hierarchy of abstractions and a corresponding hierarchy of implementations. Rather than combining the abstractions and implementations into many distinct classes, the Bridge pattern implements the abstractions and implementations as independent classes that can be combined dynamically.
Related patterns are

Layered Architecture
The Bridge design pattern is a way of organizing the entities identified using the Layered Architecture pattern (described in volume 2) into classes.

Abstract Factory
The Abstract Factory pattern can be used by the Bridge pattern to decide which implementation class to instantiate for an abstraction object.
Fa?ade
The Fa?ade pattern simplifies access to a related set of objects by providing one object that all objects outside the set use to communicate with the set.
Related patterns are

Interface
The Interface pattern can be used with the Fa?ade pattern to allow different sets of fa?ade and implementation classes to be used without client classes having to be aware of the different classes.

Law of Demeter
A conceptual model that uses the Law of Demeter pattern often gives rise to a design that follows the Fa?ade pattern.
Flyweight
If instances of a class that contain the same information can be used interchangeably, the Flyweight pattern allows a program to avoid the expense of multiple instances that contain the same information by sharing one instance.
Related patterns are

Composite
The Flyweight pattern is often combined with the Composite pattern to represent the leaf nodes of a hierarchical structure with shared objects.

Factory Method
The Flyweight pattern uses the factory method pattern to create new flyweight objects.

Immutable
Shared flyweight objects are often immutable.
Dynamic Linkage
Allow a program, upon request, to load and use arbitrary classes that implement a known interface.
Related patterns are

Virtual Proxy
The Virtual Proxy sometimes uses the Dynamic Linkage pattern to load the class that it needs to create its underlying object.
Virtual Proxy
If an object is expensive to instantiate and may not be needed, it may be advantageous to postpone its instantiation until the object is needed. The Virtual Proxy pattern hides the fact that an object may not yet exist from its clients, by having them access the object indirectly through a proxy object that implements the same interface as the object that may not exist. The technique of delaying the instantiation of an object until it is actually needed is sometimes called lazy instantiation.
Related patterns are

Fa?ade
The Fa?ade pattern can be used with the Virtual Proxy pattern to minimize the number of proxy classes that are needed.

Proxy
The Virtual Proxy pattern is a specialized form of the Proxy pattern.
Decorator
The Decorator pattern extends the functionality of an object in a way that is transparent to its clients. It does that by using an instance of a subclass of the original class that delegates operations to the original object.
Related patterns are

Delegation
The Decorator pattern is a structured way of applying the Delegation pattern.

Filter
The Filter pattern is a specialized version of the Decorator pattern that focuses on manipulating a data stream.

Strategy
The Decorator pattern is useful for arranging for things to happen before or after the methods of another object are called. If you want to arrange for different things to happen in the middle of calls to a method, consider using the Strategy pattern.

Template Method
The Template Method pattern is an alternative to the Decorator pattern that allows variable behavior in the middle of a method call instead of before or after it.
Cache Management
The Cache Management pattern allows fast access to objects that would otherwise take a long time to access. It involves keeping a copy of objects that are expensive to construct after the immediate need for the object is over. The object may be expensive to construct for any number of reasons, such as requiring a lengthy computation or being fetched from a database.
Related patterns are

Fa?ade
The Cache Management pattern uses the Fa?ade pattern.

Publish-Subscribe
You can use the Publish-Subscribe pattern to ensure the read consistency of a cache.

Remote Proxy
The Remote Proxy provides an alternative to the Cache Management pattern by working with objects that exist in a remote environment rather than fetching them into the local environment.

Template Method
The Cache Management pattern uses the Template Method pattern to keep its Cache class reusable across application domains.

Virtual Proxy
The Cache Management pattern is often used with the Virtual Proxy pattern to make the cache transparent to objects that access object in the cache.

--------------------------------------------------------------------------------

Behavioral Patterns
Chain of Responsibility
The Chain of Responsibility pattern allows an object to send a command without knowing what object or objects will receive it. It accomplishes that by passing the command to a chain of objects that is typically part of a larger structure. Each object in the chain may handle the command, pass the command on to the next object in the chain or do both.
Related patterns are

Composite
When the chain of objects used by the Chain of Responsibility pattern is part of a larger structure, that larger structure is usually built using the Composite pattern.

Command
The Chain of Responsibility pattern makes the particular object that executes a command indefinite. The Command pattern makes the object that executes a command explicit and specific.

Template Method
When the objects that make up a chain of responsibility are part of a larger organization built using the Composite pattern, the Template Method pattern is often used to organize the behavior of individual objects.
Command
Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them.
Related patterns are

Factory Method
The Factory Method pattern is sometimes used to provide a layer of indirection between a user interface and command classes.

Little Language
You can use the Command Pattern to help implement the Little Language pattern.

Snapshot
You can use the Snapshot pattern to provide a coarse grained undo mechanism that saves the entire state of an object rather than a command by command account of how to reconstruct previous states.

Template Method
The Template Method pattern can be used to implement the top level undo logic of the Command pattern.
Little Language / Interpreter
Suppose you need to solve many similar problems and you notice that the solutions to these problems can be expressed as different combinations of a small number of elements or operations. The simplest way to express solutions to these problems may be to define a little language. Common types of problems you can solve with little languages are searches of common data structures, creation of complex data structures and formatting of data.
Related patterns are

Composite
A parse tree is organized with the Composite pattern.

Visitor
The Visitor pattern allows you to encapsulate logic for simple manipulations of a parse tree in a single class.
Mediator
The Mediator pattern uses an object to coordinate state changes between other objects. Putting the logic in one object to manage state changes of other objects, instead of distributing the logic over the other objects, results in a more cohesive implementation of the logic and decreased coupling between the other objects.
Related patterns are

Adapter
Mediator classes often use adapter objects to receive notifications of state changes.

Interface
The Mediator pattern uses the Interface pattern to keep the Colleague classes independent of the Mediator class.
Low Coupling/High Cohesion
The Mediator pattern is an good example of an exception to the advice of the Low Coupling/High Cohesion pattern.

Snapshot
Capture a snapshot of an object's state so that the object's state can be restored later. The object that initiates the capture or restoration of the state does not need to know anything about the state information. It only needs to know that the object whose state it is restoring or capturing implements a particular interface.
Related patterns are

Command
The Command pattern allows state changes to be undone on a command by command basis without having to make a snapshot of an object’s entire state after every command.
Observer
Allow objects to dynamically register dependencies between objects, so that an object will notify those objects that are dependent on it when its state changes.
Related patterns are

Adapter
The Adapter pattern can be used to allow objects that do not implement the required interface to participate in the Observer pattern.

Delegation
The Observer pattern uses the Delegation pattern.

Mediator
The Mediator pattern is sometimes used to coordinate state changes initiated by multiple objects to an Observable object.
State
Encapsulate the states of an object as discrete objects, each belonging to a separate subclass of an abstract state class.
Related patterns are

Flyweight
You can use the Flyweight pattern to share state objects.

Mediator
The State pattern is often used with the Mediator pattern when implementing user interfaces.

Singleton
You can implement non-parametric states using the Singleton pattern.
Null Object
The Null Object pattern provides an alternative to using null to indicate the absence of an object to delegate an operation to. Using null to indicate the absence of such an object requires a test for null before each call to the other object’s methods. Instead of using null, the Null Object pattern uses a reference to an object that doesn’t do anything.
Related patterns are

Singleton
If instances of a class whose methods do nothing contain no instance specific information, then you can save time and memory by implementing it as a singleton class.

Strategy
The Null Object pattern is often used with the Strategy pattern.
Strategy
Encapsulate related algorithms in classes that are subclasses of a common superclass. This allows the selection of algorithm to vary by object and also allows it to vary over time.
Related patterns are

Adapter
The Adapter pattern is structurally similar to the Strategy pattern. The difference is in the intent. The Adapter pattern allows a client object to carry out its originally intended function by calling methods of objects that implement a particular interface. The Strategy pattern provides objects that implement a particular interface for the purpose of altering or determining the behavior of a client object.

Flyweight
If there are many client objects, they may share strategy objects if they are implemented as Flyweights.

Null Object
The Strategy pattern is often used with the Null Object pattern.

Template Method
The Template method pattern manages alternate behaviors through subclassing rather than delegation.
Template Method
Write an abstract class that contains only part of the logic needed to accomplish its purpose. Organize the class so that its concrete methods call an abstract method where the missing logic would have appeared. Provide the missing logic in subclass’ methods that override the abstract methods.
Related patterns are

Strategy
The Strategy pattern modifies the logic of individual objects. The Template Method pattern modifies the logic of an entire class.
Visitor
One way to implement an operation that involves objects in a complex structure is to provide logic in each of their classes to support the operation. The Visitor pattern provides an alternative way to implement such operations that avoids complicating the classes of the objects in the structure by putting all of the necessary logic in a separate visitor class. The Visitor pattern also allows the logic to be varied by using different visitor classes.
Related patterns are

Iterator
The Iterator pattern is an alternative to the Visitor pattern when the object structure to be navigated has a linear structure.

Little Language
In the Little Language pattern, you can use the Visitor Pattern to implement the interpreter part of the pattern.

Composite
The Visitor pattern is often used with object structures that are organized according to the Composite pattern.

--------------------------------------------------------------------------------

Concurrency Patterns

Single Threaded Execution
Some methods access data or other shared resources in a way that produces incorrect results if there are concurrent calls to a method and both calls access the data or other resource at the same time. The Single Threaded Execution pattern solves this problem by preventing concurrent calls to the method from resulting in concurrent executions of the method.

Guarded Suspension
Suspend execution of a method call until a precondition is satisfied.
Related patterns are

Balking
The Balking pattern provides a different strategy for handling method calls to objects that are not in an appropriate state to execute the method call.

Two-Phase Termination
Because the implementation of the Two-Phase Termination pattern usually involves the throwing and handling of InterruptedException, its implementation usually interacts with the Guarded Suspension pattern.
Balking
If an object’s method is called when the object is not in an appropriate state to execute that method, have the method return without doing anything.
Related patterns are

Double Checked Locking
The Double Checked Locking coding pattern (described in volume 2) is structurally simillar to the Balking pattern. Its intention is different. The balking pattern avoids executing code when an object is in the wrong state. The Double Checked Locking pattern avoids executing code to avoid unnecessary work.

Guarded Suspension
The Guarded Suspension pattern provides an alternate way to handle method calls to objects that are not in an appropriate state to execute the method call.

Single Threaded Execution
The Balking pattern is often combined with the Single Threaded Execution pattern to coordinate changes to an object’s state.
Scheduler
Control the order in which threads are scheduled to execute single threaded code using an object that explicitly sequences waiting threads. The Scheduler pattern provides a mechanism for implementing a scheduling policy. It is independent of any specific scheduling policy.
Related patterns are

Read/Write Lock
Implementations of the Read/Write Lock pattern usually use the Scheduler pattern to ensure fairness in scheduling.
Read/Write Lock
Allow concurrent read access to an object but require exclusive access for write operations.
Related patterns are

Single Threaded Execution
The Single Threaded Execution pattern is a good and simpler alternative to the Read/Write Lock pattern when most of the accesses to data are write accesses.

Scheduler
The Read/Write Lock pattern is a specialized form of the Scheduler pattern.
Producer-Consumer
Coordinate the asynchronous production and consumption of information or objects.
Related patterns are

Guarded Suspension
The Producer-Consumer pattern uses the Guarded Suspension pattern to manage the situation of a Consumer object wanting to get an object from an empty queue.

Pipe
The Pipe pattern is a special case of the Producer-Consumer pattern that involves only one Producer object an only one Consumer object. The Pipe pattern usually refers to the Producer object as a data source and the Consumer object as a data sink.

Scheduler
The Producer-Consumer pattern can be viewed as a special form of the Scheduler pattern that has scheduling policy with two notable features.
The scheduling policy is based on the availability of a resource.
The scheduler assigns the resource to a thread but does not need to regain control of the resource when the thread is done so it can reassign the resource to another thread.
Two-Phase Termination
Provide for the orderly shutdown of a thread or process through the setting of a latch. The thread or process checks the value of the latch at strategic points in its execution.
Order Volume 1
Return to Mark Grand's home page.

 

版权所有:UML软件工程组织