Patterns are used and repeated in everyday life. For, example, to make a cup of tea, we need to boil water, add tea, milk and finally sugar. The steps could be executed in any order but will the preparation process remain efficient, optimise and quality be the same at the end? Design Patterns is the result of the work of Christopher Alexander, an architect who in the early 1960's started to see urban planning and architecture as the continual re-application of some basic principles of best practices. According to Christopher Alexander "Each 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."
Software design process is very similar to other design processes in real life as these processes are executed according to certain patterns and requirements. We are always worried about how we can produce something very quickly and according to specific requirements. Software engineering has evolved from functional-oriented approach to object-oriented approach. Design patterns make use of object-oriented approach to solve design problems.
What is more interesting in the object-oriented approach is that, the different models produced reflect an abstraction of the real life situation. We only talk about classes and objects, their collaborations or interactions. If we can imagine, a software system is like an embedded system consisting of components (patterns). In an embedded system, whenever a particular module is faulty, we just replace it by another module or a particular module can be used in another system. The same idea can be applied in software system. We can create a common pattern that can be used by other systems.
According to the Gang of Four (GoF) (Gamma, Helm, Johnson, & Vlissides, 1995), "A design pattern systematically names, motivates and explains a general design that addresses a recurring design problem in object-oriented systems." It describes the problem, the solution, when to apply the solution, and its consequences. It also gives implementation hints and examples. The solution is a general arrangement of object and classes that solve the problem. The solution is customised and implemented to solve the problem in a particular context.
Whenever a mathematics problem needs to be solved, the problem must be read and understood. Then by using appropriate values and formulae, equations can be formulated. These equations can be solved simultaneously to get the solution. The same rules can be applied to solve other related mathematics problems. If the problem solving part can be thought of as a black box or object, then by feeding values to the black box the solution can be obtained. In this way, the black box can be used to solve similar problems. The idea behind this analogy is that the problem solving part or the black box is similar to a pattern. A pattern is a set of rules to address a particular problem and it can be designed and implemented using an object oriented approach. However, in order to have an optimised pattern, design pattern is the solution. No matter how complex a problem can be, there will always be a solution that will address the problem. How efficient the solution will be is another issue to be taken into consideration.
A general definition of design pattern could be a set of rules or steps to accomplish a task and this pattern can be used over and over again in other applications. For example, the same query pattern can be used in a library system, stock control system, airline reservation system among others.
There has been an important consideration for design patterns in the modelling of systems. France and Ghosh propose a UML-based pattern specification technique. …