Presentation is loading. Please wait.

Presentation is loading. Please wait.

Patterns in programming 1. What are patterns? “A design pattern is a general, reusable solution to a commonly occurring problem in software. A design.

Similar presentations


Presentation on theme: "Patterns in programming 1. What are patterns? “A design pattern is a general, reusable solution to a commonly occurring problem in software. A design."— Presentation transcript:

1 Patterns in programming 1

2 What are patterns? “A design pattern is a general, reusable solution to a commonly occurring problem in software. A design pattern is not a finished design that can be transformed directly into code. It is a description or template for solving a particular problem. Thinking in terms of design patterns allows you to formulate a high-level solution that is independent of the implementation details.” MSDN Design Patterns http://msdn.microsoft.com/en-us/library/ff650734.aspx Patterns in programming2

3 Pattern categories Architectural patterns High level Affects the whole application or a major part of an application Examples: Layers, Model-View-Controller (MVC), Model-View-ViewModel (MVVM) Design patterns Intermediate level Affects a few classes Idioms Low Level Affects a single class or part of a single class Example: Unit testing an expected exception Try { … use resource … Assert.Fail(); } Catch (ExpectedException) { /* ignore */ } Source: Buschmann et al. Pattern-Oriented Software Architecture, Wiley 1996, page 11-15 Patterns in programming3

4 Design pattern categories Creational patterns How to create object when creation requires decisions Structural patterns How classes and object are composed to form larger structures Behavioral patterns Algorithms and assignment of responsibilities between objects Source: Gamma (GoF) et. al. Design Patterns, Elements of Reusable Object-Oriented Software, Addison Wesley, 1995 Patterns in programming4

5 Creational patterns Singleton Ensure that a class has only one instance, and provide a global point of access to it. Factory method Define a static method go create (or get) objects Object pool Manages the reuse of objects Patterns in programming5

6 Singleton Idea Exactly 1 instance of a class A single global point of access for all clients (users of the object) Example Class A { private static A instance = new A(); private A() { /* private constructor */ } public static A Instance { get { return instance; }} } Usage Connections to database You only need one in your application Classes without state Example: SingletonExampleComparer Patterns in programming6

7 Singleton, eager vs. lazy instantiation Eager instantiation The one-and-only instance is created early Lazy instantiation The one-and-only instance is create late On the first call to get Pros Saves time if the instance takes a lot of time to create, and is unlikely to be used Saves memory if the instances uses a lot of memory, and is unlikely to be used Cons Requires synchronization to be thread safe Spends time if the instances is used a lot (more than once) Patterns in programming7

8 Static factory method Idea Can return an instance of the specified class, or one of its subclasses A constructor can only “return” an instance of its own class Does not have to construct a new object A constructor must create a new object Can have any name A constructor must have the same name as the class Dogma idea: No public constructors, only factory methods! Naming CreateXxx(…) GetXxx(…) Usage System.Diagnostics.StopWatch.StartNew() System.Net.WebRequest Example: FactoryWebRequestExample Example: FactoryGetOrCreate Patterns in programming8

9 Object pool Idea Reuse objects which are expensive to create Expensive = takes a lot of time Usages Thread pool Connection pool Connections to databases, and other servers Related patterns Singleton The pool class itself is often a singleton, since the idea is to make all parts of the application share a single pool of objects Patterns in programming9

10 Structural patterns Decorator Attach additional responsibilities to an object, dynamically Composite Compose objects into tree structure Patterns in programming10

11 Decorator Idea Enhancing the service provided to the user of the class Extend the functionality of an object – transparent to its users Also known as Wrapper Usages System.Collections.ObjectModel.ReadOnlyCollection Implements IList + aggregates an IList object http://msdn.microsoft.com/en-us/library/ms132476(v=vs.110).aspx System.IO.BufferedStream Implements Stream + aggregates a Stream object http://msdn.microsoft.com/en-us/library/system.io.bufferedstream(v=vs.110).aspx Examples: DecoratedCoffee + DecoratedStudent Patterns in programming11

12 Composite Idea Recursively build composite objects from other objects. Objects are composed at runtime using AddXx() / Append() methods to add new sub-objects RemoveXx methods to remove sub-objects Usage StringBuilder Append(str) WPF (Windows Presentation Foundation) Normally composed using XAML Example (very simple): SimpleBrowserAsync (concurrency) Patterns in programming12

13 Behavioral patterns: it’s about algorithms Iterator Provide a way to access the elements of a collection sequentially without exposing its underlying representation Observer Define a one-to-many dependency between objects, so that when one object changes states, all its dependents are notified. Strategy Define a family of algorithms, encapsulate each one, and make them interchangeable at runtime. Template method Define a skeleton of an algorithm, deferring some steps to subclasses. Patterns in programming13

14 Iterator Idea Being able to visit all the elements in a collections, without knowing the internal structure of the collection. Usage IEnumerable + IEnumerator used a lot on all kinds of collections in the C# API Patterns in programming14

15 Observer Idea Decouples otherwise dependent classes. Observers register with an observable class. When something happens (like a change of state) in the observable class, all observers are notified Usage GUI frameworks Buttons (etc.) are observable, event handlers are observers Event handling in general Event handlers (observers) register to listen for events Patterns in programming15

16 Strategy Idea Encapsulate (part of) and algorithm in an interface or delegate. The (part of) algorithm may be changed at runtime Usages List.Sort(IComparer comparer) However the Comparison cannot be changed at runtime List.Sort(Comparison comp) However the Comparison cannot be changed at runtime Example StrategyFindSmallest Related pattern Template method and strategy are often alternatives Patterns in programming16

17 Template method Idea Encapsulates part of an algorithm in an abstract method implemented by sub-classes An abstract base class has a template method A method in which one (or more) steps are call to abstract methods The abstract method is implemented in a sub-class The base class method calls the sub-class method “The Hollywood Principle” Don’t call us. We will call you Usage Often used in frameworks Example TemplateMethodHotDrink TemplateMethodTcpServer Patterns in programming17

18 References and further readings Gamma et al. Design Patterns, Addison Wesley 1994 First book on Design patterns Examples in C++ and Smalltalk Written by the so-called “Gang of Four” GoF Buschmann et al. Pattern-Oriented Software Architecture, Volume 1, Wiley 1996 Freeman & Freeman Head First Design Patterns, O’Reilly 2004 Kerievsky Refactoring to Patterns, Addison Wesley 2005 Dofactory.NET design patterns Very short descriptions http://www.dofactory.com/Patterns/Patterns.aspx Codeproject.com Design Patterns More elaborate descriptions http://www.codeproject.com/KB/architecture/#Design+P atterns Patterns in programming18


Download ppt "Patterns in programming 1. What are patterns? “A design pattern is a general, reusable solution to a commonly occurring problem in software. A design."

Similar presentations


Ads by Google