Edit: Updates for OH 4.
What Is a Design Pattern (DP)
A DP is a concept borrowed from software engineering that is in turn borrowed from architecture. A DP is a general and reusable solution to a common problem. But the solution is not complete. Instead it is a template that one can apply to a lot of different situations with minor modifications and customizations.
The DPs posted to this forum will usually include a complete solution as an example implementation of the DP. But do not assume that the DP is only applicable in that specific example context. A DP is generic and should apply to a number of situations.
Finally, a DP rarely stands alone. They are often closely related to other DPs and many solutions will include multiple DPs, sometimes within just a few lines of code.
What a Design Pattern Is Not
As mentioned above, a DP is not a comprehensive example. They are a template that one can follow to solve a given class of problems one may encounter while developing Rules.
The example code that is included with the DPs may not be fully explained. The purpose of the example code is to illustrate the DP only. But since the DPs are only templates and not complete in and of themselves, the example code will necessarily include additional code. It is your task to generalize the example code to apply it to your specific situation.
In many cases, a library exists that can be used that implements most of the details for you. As part of the updates to the DP posts written by @rlkoshak the examples have been (or will be soon) migrated to show how the DP is solved using published rule templates, block libraries, and libraries. If you use a different language you might need to translate the example code to your language of choice.
What Should I Know to Use a DP
Because a DP is not a complete solution, the reader needs to possess a few skills in order to apply them to their situation:
- the basics of how to define Items and use them in Rules code
- the parts of a Rule and how to identify those parts in various contexts, including the ability to recognize the difference between a file based rule and a managed rule
- the ability to follow a block of code and understand at a basic level what the code does
- the ability to translate a block of code from one rules language to another where necessary
- the ability to recognize and deal with code in a block that is not fully explained or defined in the DP text (e.g. reference to Items not defined in the current DP)
- the ability to generalize an example to multiple situations
Languages
The DPs may include examples in multiple different supported programming languages. They may include UI rules examples, text based rule examples, or both. The purpose of the DP is to show a way of solving a problem, not a copy and paste example to simply use as is. For that see Rule Templates.