Design Pattern « Design « Java Articles

Home
Java Articles
1.Build Deploy
2.Class
3.Core Library
4.Data Types
5.Database JDBC
6.Design
7.Development
8.File Input Output
9.Graphics Desktop
10.J2EE Enterprise
11.J2ME Wireless
12.JVM
13.Language
14.Library Product
15.Network
16.Security
17.SOA Web Services
18.Test
19.Web Development
20.XML
Java Articles » Design » Design Pattern 

1. Take control with the Proxy design pattern    javaworld.com

In software, the Proxy design pattern proves useful in numerous contexts. For example, using the Java XML Pack, you use proxies to access Web services with JAX-RPC (Java API for XML-based remote procedure calls). Example 1 shows how a client accesses a simple Hello World Web service:

2. Follow the Chain of Responsibility    javaworld.com

Pipes are powerful because they let you dynamically compose a chain of operations. Software systems often employ the equivalent of pipes (e.g., email filters or a set of filters for a servlet). At the heart of pipes and filters lies a design pattern: Chain of Responsibility (CoR).

3. Amaze your developer friends with design patterns    javaworld.com

I'm targeting this column for experienced Java developers who are, for the most part, unfamiliar with design patterns. As a reader of this column, you should have a good grasp of Java programming language constructs. For example, you should understand inner classes, and when it might be appropriate to use them. On the other hand, you do not need to be a language lawyer to benefit from this column; for example, you don't need to know, off the top of your head, the difference between nested and inner classes.

4. An inside view of Observer    javaworld.com

This publish-subscribe pattern, where an observer registers with a subject and subsequently receives notifications, is quite common, both in everyday life and in the virtual world of software development. In fact, the Observer pattern, as it is known, is one of the linchpins of object-oriented software development because it lets dissimilar objects communicate. That ability lets you plug objects into a framework at runtime, which allows for highly flexible, extensible, and reusable software.

5. The Java Enclosing Class as an Implementation of the Builder Pattern    javaworld.com

Those of you familiar with the Builder Pattern may already be thinking what I was. That enclosing class looks a lot like a Builder with the nested class as its Product! It turns out that an enclosing class can indeed be used in this way. In some cases, it can even provide stronger encapsulation compared to a traditional Builder implementation. In this article we're going to find out how by exploring three examples of implementing run-time composition for a given Product.

6. Java Tip 68: Learn how to implement the Command pattern in Java    javaworld.com

In programming languages like C, function pointers are used to eliminate giant switch statements. (See "Java Tip 30: Polymorphism and Java" for a more detailed description.) Since Java doesn't have function pointers, we can use the Command pattern to implement callbacks. You'll see this in action in the first code example below, called TestCommand.java.

7. Java Design Patterns    javaworld.com

Follow the Chain of Responsibility The Chain of Responsibility (CoR) pattern decouples the sender and receiver of a request by interposing a chain of objects between them. In this installment of Java Design Patterns, David Geary discusses the CoR pattern and two implementations of that pattern in the Java APIs—one from client-side Java and the other from server-side Java. David Geary, August 2003

8. Design patterns make for better J2EE apps    javaworld.com

When beginning a new J2EE project, some team members often ask: "If J2EE is itself an architecture, why do we need more?" Many developers held that misconception in J2EE's early days, but seasoned J2EE developers understand that J2EE fails to provide the application architecture necessary to consistently deliver high-quality applications. These developers often use design patterns to fill that gap.

9. Simply Singleton    javaworld.com

Sometimes it's appropriate to have exactly one instance of a class: window managers, print spoolers, and filesystems are prototypical examples. Typically, those types of objects—known as singletons—are accessed by disparate objects throughout a software system, and therefore require a global point of access. Of course, just when you're certain you will never need more than one instance, it's a good bet you'll change your mind.

10. Factory methods    javaworld.com

Factory method is just a fancy name for a method that instantiates objects. Like a factory, the job of the factory method is to create -- or manufacture -- objects.

11. A look at the Composite design pattern    javaworld.com

The other day I was listening to National Public Radio's Car Talk, a popular weekly broadcast during which callers ask questions about their vehicles. Before every program break, the show's hosts ask callers to dial 1-800-CAR-TALK, which corresponds to 1-800-227-8255. Of course, the former proves much easier to remember than the latter, in part because the words "CAR TALK" are a composite: two words that represent seven digits. Humans generally find it easier to deal with composites, rather than their individual components. Likewise, when you develop object-oriented software, it's often convenient to manipulate composites just like you manipulate individual components. That premise represents the fundamental principle of the Composite design pattern, the topic of this Java Design Patterns installment.

12. Strategy for success    javaworld.com

Back in 1984, I graduated from college with a mechanical engineering degree and went to work as a software engineer. After teaching myself C programming, by 1985 I was busily developing a 50,000-line graphical user interface (GUI) for Unix. That was fun.

13. Observer and Observable    javaworld.com

None of these requirements presents an insurmountable programming challenge. If the code that handles each requirement had to be written de novo, however, it would add significant work to the overall effort. Fortunately, support for these tasks is already provided by the Java class library in the form of interface Observer and class Observable. The functionalities of these two were inspired, in part, by the requirements of the Model/View/Controller architecture.

14. Web application components made easy with Composite View    javaworld.com

Developers typically implement components and containers with the GOF Composite design pattern, which lets you compose graphical objects into tree hierarchies. Meanwhile, layout managers are typically implemented with the GOF Strategy design pattern, so that you can change a container's layout strategy at runtime without changing the container itself. For its part, the J2EE Composite View design pattern acts as a recipe for components, containers, and layout managers for JSP-based Web applications.

15. When is a singleton not a singleton?    javaworld.com

However, in certain situations, two or more singletons can mysteriously materialize, disrupting the very guarantees that the singleton is meant to provide. For example, if your singleton Frame is meant as a global user interface for your application and two are created, your application will have two Frames on the screen -- quite confusing for the user. Further, if two counters are created where one was intended, then clients requesting numbers will not get the desired sequence 1, 2, 3... but rather a multiple sequence such as 1, 1, 2, 2, 3, 3, 3.... Additionally, if several instances of a database-connection singleton are created, you might start receiving SQLExceptions complaining about "too many database connections."

16. Speaking on the Observer pattern    javaworld.com

Simply, the Observer pattern allows one object (the observer) to watch another (the subject). The Observer pattern allows the subject and observer to form a publish-subscribe relationship. Through the Observer pattern, observers can register to receive events from the subject. When the subject needs to inform its observers of an event, it simply sends the event to each observer.

17. Java Tip 38: The trick to "Iterator Observers"    javaworld.com

So why have I said that the approach used in Listing 1 is poor? InitList() is coupled to the use of a Vector. Consider the impact and effort involved if your system contains many dependencies on a particular collection class -- in this case Vector -- and you later need to change it to your own class or a third-party class that suits your system better. So how can we improve this design? Listing 2 shows how, by using polymorphism and passing an iterator as a parameter rather than a Vector, class Display can be used by any client with a collection class that supports the Enumeration interface. Class Test demonstrates this by passing either a Vector or a hashtable's Enumeration to the Display object. (For more information on abstraction and polymorphism, see my JavaWorld article, "Polymorphism and Java.")

18. Java Tip 98: Reflect on the Visitor design pattern    javaworld.com

Still, it seems like a lot of extra work. Worse, what happens when you add a new Visitable type, say VisitableInteger? That is one major drawback of the Visitor pattern. If you want to add a new Visitable object, you have to change the Visitor interface and then implement that method in each of your Visitor implementation classes. You could use an abstract base class Visitor with default no-op functions instead of an interface. That would be similar to the Adapter classes in Java GUIs. The problem with that approach is that you need to use up your single inheritance, which you often want to save for something else, such as extending StringWriter. It would also limit you to only be able to visit Visitable objects successfully.

19. Adopt Adapter    javaworld.com

Pretend you're back in 1999 and you've just landed a job with a dot-com. Much of your compensation comes from stock options, and you are content. Fortunately, your work is interesting. You're developing an application builder that lets users visually construct Swing applications. So you seize upon a novel idea: display a view's component hierarchy next to the view itself like this:

20. Façade clears complexity    javaworld.com

Although object-oriented development fails to reduce the complexity of learning a new API, we can use its facilities to implement a design pattern that does: the Façade pattern, where objects known as façades offer a simple interface to complex subsystems so you can do something without knowing the subsystem's particulars. Let's see how the Façade pattern works.

21. How to implement state-dependent behavior    javaworld.com

Separating behaviors into disparate objects makes sense when the separation takes advantage of polymorphism. Polymorphism allows two objects to be treated identically, using the same methods, even though the objects implement these methods in quite different ways. It is this concept of "same appearance, different behavior" that gets the 0 word, polymorphism. (You can tell how important this concept is by the number of syllables the word has!)

22. Singletons rule    javaworld.com

The difference between using a singleton over a class with static methods boils down to effective object-oriented design. Singletons normally represent a cleaner approach. A class of static methods, unfortunately, breaks down to a simple list of functions, or utilities.

23. The Singleton as a Network Management Pattern    onjava.com

The provisioning server focuses its efforts on presenting a single instance, receiving orders, and updating the complex back-end systems. In network management, it's often a key requirement that there is only one provisioning server instance. Orders are routed to this instance using intra-JVM static access (as used in this example), RMI, CORBA, etc. Traditionally, the server software is installed on a single designated machine and clients then access the services it exports. This solves the problem of avoiding multiple instances of the server code--by deploying just one. In other words, the provisioning server is a good candidate for implementation using the Singleton pattern. Let's take a look at it.

24. Using the Decorator Pattern    onjava.com

Java programmers know that they can change the behavior or extend functionality of a class by extending the class. This is called inheritance, and is an important feature of object-oriented programming. For example, if you want a Swing label that draws a border, you can subclass the javax.swing.JLabel class. However, subclassing is not always appropriate. Sometimes inheritance is impractical and you have to resort to some other way, such as using the Decorator pattern. This article explains the Decorator pattern and when to subclass and when to decorate. The classes used in this application reside inside the package called decorator and can be downloaded here.

25. Resource Command Pattern    theserverside.com

We are proud to provide this patterns/strategies repository to the community. Feel free to post any useful design tips you know!

26. Principles, Patterns, and Practices: The Strategy, Template Method, and Bridge Patterns    today.java.net

This second pattern is called Template Method, and we can see it by adding the next obvious layer of polymorphism to the Logger example. We already have one layer that allows us to change the way log messages are recorded. We could add another layer to allow us to change how log messages are formatted. Let's suppose, for instance, that we want to support two different formats. One prepends the time and date to the message as above; the other prepends only the time.

27. Transparent State Management Using the Decorator Pattern    today.java.net

In the context of a Java EE web application, the term transparent state management refers to a mechanism that is capable of maintaining state across multiple requests, at the same time remaining completely invisible to the underlying components that make use of it. In other words, if such a mechanism is in place, then web applications can acquire statefulness without having to explicitly deal with state management APIs such as HttpSession. In many scenarios, this would provide a better alternative to the traditional way of explicitly handling session management APIs. The article explains where transparent state management would be useful, and discusses a reusable solution to implement transparent state management. It should be noted that for the purpose of understanding, this article uses Struts as an example web framework to explain the subsequent sections.

28. Principles, Patterns, and Practices: The Factory Pattern    today.java.net

One of the most significant problems with this pattern is that the abstract factory interface is volatile. For example, let's say that we want a new method in the factory named makeIterableList, which creates the type of list that can be iterated over the fastest. The change to the AbstractListFactory class implies that every class that uses AbstractListFactory must be recompiled and redeployed. This is annoying, especially since most of those classes won't be using the new method.

29. Design Principles from Design Patterns    artima.com

Bill Venners: On the subject of interfaces, the GoF book includes some UML class diagrams. UML diagrams seem to mix interface and implementation. When you look at it, you often see the design of the code. It isn't necessarily obvious what's API and what's implementation. If you look at JavaDoc, by contrast, you see the interfaces. Another place I see the lack of differentiation between interface and implementation is XP. XP talks about the code. You're changing this amorphous body of code with test- driven development. When should the designer think about interfaces versus the whole mass of code?

30. How to Use Design Patterns    artima.com

On October 27, 2004, Bill Venners met with Erich Gamma at the OOPSLA conference in Vancouver, Canada. In this interview, which will be published in multiple installments in Leading-Edge Java on Artima Developer, Gamma gives insights into software design. In this first installment, Gamma describes gives his opinion on the appropriate ways to think about and use design patterns, and describes the difference between patterns libraries, such as GoF, and an Alexandrian pattern language.

31. Understand the role of intent in design patterns    artima.com

I grabbed this from the bottom of the state pattern one. Use it here as the first example of composition for a purpose in design patterns.

32. Cooperative Visitor: A Template Technique for Visitor Creation    artima.com

Have an opinion about the Cooperative Visitor? Discuss this article in the Articles Forum topic, Cooperative Visitor: A Template Technique for Visitor Creation.

33. Patterns and Practice    artima.com

Erich Gamma: In addition to reading books, you need to read and understand lots of code, see how existing systems solve a particular problem and what experienced designers did. Basically what design patterns do is to tell you what these developers have done. But, just reading about it isn't enough. You become a master by mimicking the work of excellent developers. There are many interesting open source projects available that can serve as interesting reading material. Eclipse is just one of them. It also doesn't hurt to contribute to an open source project. Not only do you learn about a particular development process you will also learn how to communicate about a design in a group of developers. As a good designer you not only come up with good designs you also communicate and defend them. You have to practice, like an apprentice in a way. Over time you'll become as experienced as experienced designers.

34. Abstraction and Efficiency    artima.com

Bjarne Stroustrup: When you get to percents, 10%, 50%, and such, you start arguing whether efficiency matters, whether next year's machine will be the right solution rather than optimization. But in terms of dynamic versus static, we're talking factors: times 3, times 5, times 10, times 50. I think a fair bit about real-time problems that have to be done on big computers, where a factor of 10 or even a factor of 2 times is the difference between success and failure.

35. Part 1: Creating efficient rules for the Generic Log Adapter    ibm.com

10. Using custom call out classes may be cheaper when multiple pieces of the input string need to be manipulated in a coordinated fashion The generic log adapter allows the ability to call a method of a specified class and pass the results of the regular expression match to the class. The result of the method call will then be the final result that goes into the Common Base Event. This particular feature and details on how to make it 's usage efficient are described further on in this article. Below is an example of when to use class call outs. Class call outs may couple your ruleset tightly with code but may sometimes be absolutely necessary to preserver performance. Consider the following two regular expressions. The first one tries to format the date and time by changing the separators and concatenating the individually extracted pieces of data from the input string. The second one extracts the time stamp in lesser number of blocks and provides it to a method of a class that provides the same result. Look in the table above to see the actual replacement or output string pattern and results from using both of these individually.

36. Java design patterns 201    ibm.com

This tutorial expands upon the "Java design patterns 101" tutorial, examining a broad range of design pattern resources and several specific design patterns in detail and implementation.

37. Double-checked locking and the Singleton pattern    ibm.com

The Singleton creation pattern is a common programming idiom. When used with multiple threads, you must use some type of synchronization. In an effort to create more efficient code, Java programmers created the double-checked locking idiom to be used with the Singleton creation pattern to limit how much code is synchronized. However, due to some little-known details of the Java memory model, this double-checked locking idiom is not guaranteed to work. Instead of failing consistently, it will fail sporadically. In addition, the reasons for its failure are not obvious and involve intimate details of the Java memory model. These facts make a code failure due to double-checked locking very difficult to track down. In the remainder of this article, we'll examine the double-checked locking idiom in detail to understand just where it breaks down.

38. Java design patterns 101    ibm.com

Design patterns capture the experience of expert software developers and present common recurring problems, their solutions, and the consequences of those solutions in methodical way. This tutorial explains why patterns are useful and important for object-oriented design and development, and how patterns are documented, categorized, and cataloged. It also discusses when patterns should be used and provides examples of important patterns and how they are implemented.

39. Create a static adapter for use with the Generic Log Adapter    ibm.com

The Generic Log Adapter extends its functions by providing support to create a custom static adapter. It does this by providing a set of interfaces. Using a static adapter completely eliminates the use of regular expressions. In other words, it is not possible to use regular expressions for some properties and Java code for other properties. In this approach, all the parsing and the assigning of values to the properties of Common Base Events must be handled through Java code.

40. Diagnosing Java Code: The Dangling Composite bug pattern    ibm.com

Consider the following singly linked implementation of the LinkedList class, with a dangling composite. To keep the example simple, I implemented only a few of the methods defined in java.util.LinkedList. Just to show how insidious bugs of this pattern can be, I've already introduced a bug in the following code. See if you can spot it.

41. Working with Design Patterns: Command    developer.com

I'll start with the addPatron command functionality. An initial unit test for this chunk of code is shown in Listing 2. The test truly attempts to isolate code as a standalone unit: It verifies that code in the service method calls the LibrarySystem method add(Patron) with a properly-populated Patron argument. Long-term, this is perhaps not the best way to approach the test. Short-term, it's just fine!

42. Working With Design Patterns: Singleton    developer.com

The singleton is perhaps the most maligned software design pattern out there. It's right up there with the visitor pattern, which is often denigrated by developers as too complex. Yet, the notion behind singleton is simple: ensure that only one instance of a specific type exists during application execution.

43. Working with Design Patterns: Flyweight    developer.com

The original Design Patterns book contains 23 patterns that identify named solutions to common software development problems. Over the years, I've found a need for many of these patterns over and over again. I'm continually recognizing patterns such as the command and template method. I've found only minimal use for some of the patterns, however, such as flyweight. Yet, flyweight is a design pattern that Java itself heavily depends upon.

44. Working with Design Patterns: Observer    developer.com

The observer design pattern provides a simple solution: Instead of passing a client reference to the fax server, the client passes an abstraction of itself. It defines itself as an "observer" by implementing an interface (java.util.Observer), and then passes the interface reference to the fax server. The fax server knows only that it's interacting with an Observer instance, not a ConsoleClient or a FancyLcdPanelClient.

45. Working With Design Patterns: State    developer.com

Based on these requirements, the code to manage patron holds (see Listing 3) really isn't that bad, but I'm starting to wonder where it's headed. I must ensure I have if statements in the right place, for example, when doing an update: If I add code to check to see whether any hold needs to be cleared, but neglect to guard against the case where the holding isn't already on hold, my code throws a NullPointerException. As I consider similar features, such as transfers and placing books on reserve, I'm thinking that the code easily could start getting unwieldy and confusing.

46. Working With Design Patterns: Factory Method    developer.com

The factory method is a simple inheritance-based design pattern. Most programmers would implement the pattern sooner or later, even if they didn't know what a factory method was. The value of the pattern in this case is that the construct now has a standard name, and that the pattern recommends a preferred solution instead of at least a couple other variant implementations. This implementation of the factory method pattern—in the context of creating a hierarchy of unit tests—is relevant enough to a fairly common test problem that it has its own pattern name: abstract test case.

47. What Are Design Patterns?    developer.com

In one sense you feel that the more elegant solution will be more reusable and more maintainable, but even if you are the sole likely programmer, you feel reassured once you have designed a solution that is relatively elegant and that doesn't expose too many internal inelegancies.

48. Working with Design Patterns: Composite    developer.com

A composite is an object that can contain other objects. The composite pattern can be used in situations where client code can treat composites in the same manner as non-composites. In this example of the composite design pattern, I demonstrate how the need to express complex conditionals in SQL can be neatly fulfilled using the composite pattern. Individual, or "primitive," clauses, such as name like 'abc%', can be combined using conjunctions such as and. I can consider that an and expression is a composite clause that can consists of primitive clauses such as like.

49. Working with Design Patterns: Template Method    developer.com

The "policy" method in eval and also evalWithThrow are also referred to as template methods. When applying Template Method, we provide a common superclass method that represents an algorithm, or template, for behavior.

50. Working With Design Patterns: Mediator    developer.com

Even if having devices talk to one another directly was the best design, however, it's not even feasible in this environment. The self-checkout lane is actually an amalgam of devices produced by different manufacturers. They don't know how to talk to each other because there's no standard protocol for these devices.

51. Build and Command Objects?Using Design Patterns    developer.com

In this article, I have covered the basis of creational "Builder" and behavioral "Command" patterns, and have shown how to use them in an overall architecture design. I also have shown how to look for places to apply them. I firmly believe that architects need not only know these patterns, but also have a strong understanding on where these patterns fit on the overall design; that sometimes can be harder than just knowing them.

52. Working With Design Patterns: Chain of Responsibility    developer.com

To understand the use of the chain of responsibility design pattern, think "chain of command." A request lands in Jane's inbox. Depending on the request and Jane's power or ability, she decides whether or not she can handle the request. If she can't handle the request, she passes it on to the next person in the chain, perhaps a manager. The manager either handles the request, or again passes it on.

53. Working With Design Patterns: Prototype    developer.com

Many of the added materials are duplicate copies of the same title, where every piece of information remains the same (and you'll assume that the information need not be verified for these copies). The catalog can make a duplicate of an already existing material—the prototype—thus sparing the API call.

54. Working With Design Patterns: Abstract Factory    developer.com

Like many design patterns, the abstract factory pattern and the builder pattern appear very similar in terms of their class structure. They are both creational patterns used to construct complex object families. However, the builder pattern has an emphasis on step-by-step construction of each part of the composite structure, whereas the abstract factory is designed to return a constructed object immediately.

55. Working With Design Patterns: Interpreter    developer.com

Within the interpreter design pattern, the Document passed from Expression object to Expression object (via the evaluate method) is known as the context.

56. Working With Design Patterns: Odds and Ends    developer.com

The Wikipedia page on Design Patterns contains a nice classification table for about 40 different patterns. I've discussed about 25 of these patterns in other articles appearing at Developer.com. My articles have covered all of the 23 patterns appearing in the book Design Patterns, plus I've covered the Null Object pattern, which doesn't appear in the Wikipedia classification table.

57. Threads Versus The Singleton Pattern    developer.com

Given the recent uptake in the application of the singleton design pattern, it bears noting that certain applications of this pattern might not play nicely should they be utilized in a threaded program. That is to say, there are times when your design intent is that the "singleton" concept should be applied to a user or a transaction, and not simply to the application itself. You are rather likely to encounter this very situation if you write J2EE code because each request is typically processed from its own thread. Depending on how long some JDBC operations take for your application, you might inadvertently have a singleton helper class step on itself while dealing with two (or more) requests. Although you probably could address some of these issues with the judicious use of synchronized blocks, do not overlook the utility of the ThreadLocal class. In this article, I will demonstrate the risk of not accounting for Threads when using a singleton pattern and show how simple it is to address.

58. Working With Design Patterns: Iterator    developer.com

Remember that the Design Patterns book, in which the iterator pattern was formally defined as part of a catalog of patterns, was published in 1995. No Java to speak of: C++ was the dominant OO language. Object-oriented development itself was new to most programmers.

59. Working With Design Patterns: Visitor    developer.com

It's up to the visitor implementation to decide what to do with each of these callbacks. Listing 5 shows an implementation for the XML transformer. The XmlBuilder class implements the Visitor interface, providing appropriate logic for each of the visit, depart, and visitPrimitiveAttribute methods.

60. Working With Design Patterns: Memento    developer.com

A memento represents something you want to hold onto (and no, it's not a chewy candy). In software design, the memento pattern provides a preferred way to hold onto information. Memento of course has other uses, but it's often applied as part of a solution to implementing undo and redo.

61. Design Patterns - Deja Vu at Work    developer.com

Some people think of design patterns as a panacea in the never-ending quest for a rational software design. Some others regard patterns just as another buzzword in the context of object oriented programming. But actually, patterns are about the same principles we have successfully used in various engineering disciplines for a long time:

62. Working With Design Patterns: Bridge    developer.com

Short-term, implementing the bridge pattern can be overkill. Sometimes, the separation isn't worth it: A couple of classes in a couple of potentially related hierarchies might be more simply stated as four combined subclasses. But, imagine the work behind half a dozen media types and another half a dozen print formats. Look for frequency of change and common sense to be your guide.

63. Working With Design Patterns: Facade    developer.com

Facades go to the core of the notion of information hiding in OO design. The ProcessBuilder and Process classes represent implementation details. The Command class interface reduces these details to a small set of abstractions: execute a command and get its output.

64. Global Variables in Java with the Singleton Pattern    developer.com

Java and C++ are quite similar, and this makes it relatively easy for C++ programmers to learn the newer language. There are a few areas, however, that are different enough to cause problems, and one of these is the lack of global variables. This can be overcome in Java with the application of the Singleton design pattern. This article will look at the use of this pattern as an aid to C++ developers who are making the move to Java and who want to be productive now by putting off the transition to no global variables to a later date, flattening the learning curve somewhat.

65. Pattern Summaries: Chain of Responsibility    developer.com

Now let's look at an example of a design than incorporates the Chain of Responsibility pattern. Figure 3 shows a class diagram based on the physical security example that was discussed at the beginning of this article.

66. Working with Design Patterns: Strategy    developer.com

At this juncture, I'll just worry about altering DateColumn to deal with the variant behavior. The whole idea of the strategy design pattern, with respect to this example, is that I pass a DBMS-specific formatter object to a DateColumn object. The class of this formatter object contains the appropriate behavior.

67. Working with Design Patterns: Null Object    developer.com

The null object pattern found its way into the literature in the form of a 1996 article by Bobby Woolf, "The Null Object Pattern." Its basic goal is to find a way to encapsulate the notion of how to "do nothing" in code [Woolf]. In a simpler time, we might have referred to the null object pattern as a stub.

68. Working With Design Patterns: Builder    developer.com

The builder pattern is reminiscent of the Template Method pattern. When using Template Method, a base class defines an algorithm structure as well as the common details required to implement that algorithm. Derived classes complete the algorithm by "filling in the holes." The builder pattern primarily differs in that its job is to construct objects, not drive an algorithm. It also represents a "separation" of the template method—the algorithm is defined in one class (the director) but implemented in a separate builder hierarchy.

69. Aligning IT with Business Strategy    developer.com

One of the most critical tasks in the portfolio management process is to define and prioritize the organization's business strategy (as opposed to prioritizing individual projects). A pair-wise comparison matrix—discussed below—can be used to help executives objectively prioritize business strategy for the upcoming planning horizon.

70. Pattern Summaries 6: Adapter and Decorator    developer.com

This is the first of a group of patterns that are related to the low level structure of the classes in an application. This article discusses patterns called Adapter and Decorator, which come from Volume 1 of Patterns in Java. These patterns are in the same article because they are structurally similar.

71. Pattern Summaries: Façade and Iterator    developer.com

This and the next few articles will be focused on patterns related to the low-level structure of the classes in an application. This article discusses two patterns called Façade and Iterator, which come from Volume 1 of "Patterns in Java."

72. Design Pattern Variations: A Better Visitor > A Problem Visitor    informit.com

The starting point of this article was an extremely interesting critique [1] of the Visitor Pattern (VP), reiterating its disadvantages and questioning its value as a pattern in a very exhaustive manner. As usual, this kind of thorough analysis proves to be a fertile ground for new ideas—this article will present a couple of variations of the pattern responding systematically to all the major shortcomings of VP.

73. Design Patterns in Java: Adapter > Adapting to an Interface    informit.com

An object is a client if it needs to call your code. In some cases, client code will be written after your code exists and the developer can mold the client to use the interfaces of the objects that you provide. In other cases, clients may be developed independently of your code. For example, a rocket-simulation program might be designed to use rocket information that you supply, but such a simulation will have its own definition of how a rocket should behave. In such circumstances, you may find that an existing class performs the services that a client needs but has different method names. In this situation, you can apply the Adapter pattern.

74. Design Patterns in Java: The Observer > Data Sharing    informit.com

The publish-and-subscribe pattern is commonly known as the observer pattern, and a Java implementation of it is the topic of this article. One of the best aspects of the observer pattern is the economy it affords—the data is stored just once, and the observers can easily keep track of changes. As you’ll see, a key part of this is that the observers are asynchronously updated.

75. Patterns and Java - A Matter of Good Taste    developer.com

Classes are really simple in Java. The single inheritance prevents us from doing CLASS ADAPTERS (or other mix-in patterns). But it also enables us to call super methods, i.e., to distribute processing within a whole inheritance tree (enabling some hard-wired CHAIN OF RESPONSIBILITY patterns). The missing multiple inheritance is usually just an issue if we have to state-extend multiple classes in an existing class hierarchy, without changing inheritance relations.

java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.