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.  
              |