Classes as Layers: Rewriting Design Patterns with COP Alternative Implementations of Decorator, Observer, and Visitor Matthias Springer‡ Hidehiko Masuhara‡ Robert Hirschfeld†,§ ‡ Department of Mathematical and Computing Sciences, Tokyo Institute of Technology, Japan † Hasso Plattner Institute, University of Potsdam, Germany § Communications Design Group (CDG), SAP Labs, USA; Viewpoints Research Institute, USA
[email protected] [email protected] [email protected] Abstract this paper and present the alternative implementations of the This paper analyzes and presents alternative implementations three design pattern using that mechanism. For every design of three well-known Gang of Four design patterns: Decora- pattern, we present an example, identify shortcomings in a tor, Observer, and Visitor. These implementations are more conventional implementation, show a COP-based implemen- than mere refactorings and take advantage of a variant of tation, and discuss consequences and possible disadvantages context-oriented programming that unifies classes and layers of our solution. to overcome shortcomings in a conventional, object-oriented implementation. 2. Mechanism and Notation Keywords Design Patterns, Decorator, Observer, Visitor, For the implementation of the design patterns that we show Context-oriented Programming, Layers in Section 3, a number of features and mechanisms are re- quired that are not typically found in COP frameworks. We 1. Introduction evaluated some of these features separately in our previous work but not together in this combination. The code list- Software design patterns are reusable blueprints for prob- ings shown in the remainder of this paper are written in an lems that occur frequently in software design. Among them imaginary dynamically-typed, class-based, object-oriented are the most prominent ones by “Gang of Four” [2].