Nowadays the role of software design patterns is swiftly increasing with development and improvement of computer technologies. Researchers and computer professionals are thinking of ways to enhance and to advance computer design and that is where software design patterns come from. Software patterns are claimed to belong to one of the most recent hot topics in object-oriented community. Actually, it is possible to say that software design patterns have resulted from software engineering problem-solving fields and they are rooted in design movement which is very popular nowadays.
Brad Appleton suggests that “fundamental to any science or engineering discipline is a common vocabulary for expressing its concepts, and a language for relating them together”. (Appleton, 2000) Software community defines the goal of software design patterns as assisting computer developers in solving recurring problems and difficulties associated with software development. Furthermore, software patterns are used in creating shared communication mean, in codifying solutions and capturing the body of knowledge.
In other words, software patterns set the background of architecture aimed at meeting the needs and desires of both simple users and professionals. Design pattern is “is a pattern whose form is described by means of software design constructs, for example objects, classes, inheritance, aggregation and use-relationship”. (Appleton, 2000) There are many definitions of software design patterns. One of the most accepted suggests that pattern is “the abstraction from a concrete form which keeps recurring in specific non-arbitrary contexts”.
It means that patterns are abstract models of solving software development and improvement problems. Patterns are usually oriented at generating proper solutions to software problems. When any problem appears, design patterns are used to capture the very details of the problem and to gear toward proper solutions. Software patterns are so-called instructive information which specifies problem structure and offers proven solutions to any emerging problems within certain context.
Software patterns are usually associated with organizational architecture and they are three-part rule revealing the associations between certain context, system of force and particular software configuration. In such a way, forces are allowed to resolve themselves. Software patterns are generative patterns, proto-patterns, patterns ethics, patterns envy, paternity tests, and anti-patterns. Generative patterns are the most useful. They appear in human minds and are assumed to be mental images in the world.
Actually, all patterns are abstract and they represent morphological rules defining world patterns. The difference is that world patterns simply exist, whereas mental patterns are dynamic and generative. It means that generative patterns tell people what to do, how to do and why to do. Pattern is “a rule which describes what you have to do to generate the entity which it defines”. (Appleton, 2000) Researchers tell us to remember that pattern doesn’t offer every solution and the best practice.
Even if the problem has all requisites of patterns, it is not considered a pattern till it is checked on recurring phenomenon. Software patterns are process which describes how things are being created. They deal with discernible structure. Generally, patterns are associated with the following tasks: solving problem, proving the concept, describing relationships, etc. Nevertheless, recurrence is not the only characteristics and condition of patterns. Patterns should be proved for use as recurrence is quantitative, whereas fitness is qualitative.
The major kinds of patterns are architectural, design, programming, conceptual patterns and idioms. Design patterns are effective in refining the subsystems of software system components and discussing relations between them. Summing up, design patterns are used in describing the structure of communication components and revealing general design problems within certain context. Their goal is to complement and to elaborate conceptual patterns. Design patterns delve into the putting elements into practice from conceptual space.