Peter Bucher - Mein Experiment, meine Spielereien, meine Welt...   ·   Stefan Falz   ·   Jürgen Gutsch   ·   Golo Roden   ·   ASP.NET Zone   ·   Microsoft ASP.NET
Willkommen bei ASP.NET Zone. Anmelden | Registrieren | Hilfe

Strategy Pattern

In letzter Zeit habe ich mich stärker mit Design Patterns (Entwurfsmustern) befasst, und dabei einige möglichst minimale Beispiele geschrieben, die ich euch hier nach der Reihe vorstellen möchte.

Eine Einführung erspare ich mir an dieser Stelle, einfach weil Norbert Eder das schon so gut gemacht hat :-)

Was ist eine Strategie?
Eine Strategie kann bspw. ein Verhalten darstellen, das sich ändern kann, es kann aber auch ein Verhalten (In Form einer Methode) und eine Eigenschaft kapseln. Die Möglichkeiten sind gross.

Das normale Vorgeben dabei ist, das etwas aus einer konkreten Implementierung oder Idee herausgezogen, seperat gekapselt, und in verschiedenen Variationen neu in Klassen gegossen wird.
Wichtig ist hierbei, das all diese neuen Klassen ein gemeinsames Interface implemementieren, um - wie der Name sagt - eine gemeinsame Schnittstelle bzw. Basisgemeinsamkeit zu haben.

Kurz und schmerzlos hier ein Beispielcode als Konsolenanwendung:

using System;
using System.Collections.Generic;
using System.Text;


namespace StrategyExample
{
    class Program
    {
        static void Main(string[] args)
        {
            Notebook n = new Notebook();
            n.Adapter  = new FunkyAdapter();
            n.Info();

            n.Adapter  = new TestAdapter();
            n.Info();

            Console.Read();
        }
    }

    public class Notebook {
        private IStromadapter _adapter;

        public IStromadapter Adapter {
            get { return this._adapter; }
            set { this._adapter = value; }
        }

        public void Info() {
            Console.WriteLine(this._adapter.Info());
        }
    }

    public interface IStromadapter {
        string Info();
    }

    public class FunkyAdapter : IStromadapter {
        public string Info() {
            return "Iam a funky Adapter";
        }
    }

    public class TestAdapter : IStromadapter {
        public string Info() {
            return "Iam a Test Adapter";
        }
    }
}

Das Notebook kennt nur das Interface und infolge dessen seine Signaturen, das wars.
Was für einen Wert die Eigenschaften, oder was für ein Verhalten die Methodenimplementation hervorrufen ist hierbei egal und interessiert unser Notebook nicht.
So kann auch zur Laufzeit eines Programmes, dessen Verhalten mithilfe einer Eigenschaftszuweisung komplett geändert werden.

Definition des Strategy Patterns:

Das Strategy-Muster definiert eine Familie von Algorithmen (Verhalten), kapselt sie einzeln und macht sie austauschbar. Das Strategy-Muster ermöglicht es, den Algorithmus unabhängig von den Clients die ihn einsetzen, variieren zu lassen.

Anbei noch eine kleine Übersicht als Klassendiagramm:

Veröffentlicht Samstag, 22. März 2008 03:29 von Peter Bucher
Abgelegt unter: , ,

Kommentare

# Wöchentliche Rundablage: Silverlight 2, .NET, LINQ, ASP.NET MVC, Design | Code-Inside Blog

# Singleton Pattern

Auf gehts, das nächste Pattern nach Strategy . Heute geht es darum, sicherzustellen, das von einer Klasse

Donnerstag, 27. März 2008 18:39 by Peter Bucher

# Facade Pattern und ein Anwendungsbeispiel: SessionFacade

Vor einiger Zeit habe ich über das Strategy-Pattern geschrieben , dort sind auch Links zu der Definition

Dienstag, 9. Dezember 2008 21:50 by Peter Bucher
Anonyme Kommentare sind nicht zugelassen