A software design pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice.
Each design pattern describes a family of solutions to a software design problem. It consists of one or several software design elements such as modules, interfaces, classes, objects, methods, functions, processes, threads, etc., relationships among the elements, and a behavioral description. Example design patterns are Model/View/Controller, Blackboard, Client/Server, and Process Control.
The purpose of design patterns is to capture software design know-how and make it reusable. Design patterns can improve the structure of software, simplify maintenance, and help avoid architectural drift. Design patterns also improve communication among software developers and empower less experienced personnel to produce high-quality designs.
The tool for generating template for software design pattern deals with all the pattern which are suggested by GOF. For each pattern we will be generating a template specification based upon the users/programmers input. These generated templates can be used by the programmer readily within the code specification. This tool also helps the novice programming institutions where he finds difficulty in choosing a specific GOF pattern suitable for his design problem. This tool also provides entire guide regarding the twenty three GOF patterns with examples and paper references on applicability of design patterns.
”With more than 20 design patterns in the catalog to choose from it might be hard to find the one that addresses a particular design problem ,especially if the catalog is new and unfamiliar to you” .This sentence is taken from (Gamma et al.,1995)and shows that selecting a design pattern was a problem even ten years ago .Since the number of proposed design patterns is continuously increasing, the selection problem becomes more and more difficult .for instance, Walter F Tichy’s catalog of design patterns(tichy,20060 contains over 100 patterns. In particular, for an inexperienced programmer the problem of choosing the right design pattern is very hard and tools assisting in this process become of utmost importance.
The concept of design patterns is very much applicable to object oriented software. Software design pattern describe simple and elegant solutions to specific problems in object oriented software design. Design pattern capture solutions that have been discovered, developed and evolved over time. Each design pattern essentially has a pattern name, problem context, a general solution and related consequences. The pattern name is a noun phrase which summarizes the problem and solution and is easy to remember and communicate.
Gamma et al. classifies the twenty-three design patterns presented in their book [gamma95a] as:
- Creational Patterns, which comprises of Abstract Factory, Builder, Factory Method, Prototype and Singleton. These patterns provide various solutions for creating object to serve different purposes.
- Structural Patterns, which comprises of Adapter, Bridge, Composite, Decorator, Façade, Flyweight and Proxy. These patterns provide various solutions for composing or constructing larger structures that exhibits some desired properties .And
- Behavioral patterns, which comprise of Chain of responsibility, Command, Interpreter, Iterator, Mediator, Observer, State, Strategy, Template method and visitor. These patterns deal with the algorithmic or behavioral issues of software issues.
While the effective usage of design patterns is indispensable, finding out the most suitable one is a problem. One approach is to manually go through each one of them, or classes of patterns and narrowing down on a particular pattern. While this can be a chore for the novice in design patterns, experts can easily propose a design pattern suitable for the situation. The dearth of experts and the prohibitive costs to employ an expert designer pose a serious challenge to enterprises. The research by [schm96a] identifies a number of factors including organizational, economic, political and psychological factors that have been an impediment to wide spread use of design patterns. In addition to the above reasons, we feel that a salient impediment to their use is lack of flair for abstraction on the part of the developer. The situation worsens due to the exhaustive study that needs to be undertaken by the developer to conclude on the design patterns to be used in development. To mitigate this problem one could hire an expert on design pattern or resort to a tool which could suggest an appropriate software design pattern to the developer. Development of such a tool involves initial knowledge acquisition, prototype evaluation and continuous knowledge base refinement and enhancement [birm86a].We have completed the initial Knowledge acquisition, tool development and evaluation. Continuous enhancement and refinement is an ongoing activity.