CodePaste Logo
New Snippet New Snippet Recent Snippets Recent Snippets My Snippets My Snippets Web Code Search Snippets Search
Sign inor Register
Language: C#

A Generic Strategy Pattern in C#

876 Views
Copy Code Show/Hide Line Numbers
namespace Nowcom.Quicksilver.Patterns
{
    using System;
 
    public class Strategy<T,V>
    {
        public Predicate<T> Condition { get; private set; }
        public Func<T, V> Result { get; private set; }
 
        public Strategy(Predicate<T> condition, Func<T, V> result)
        {
            Condition = condition;
            Result = result;
        }
 
        public V Evaluate(T input)
        {
            if (Condition(input))
                return Result(input);
 
            return default(V);
        }
    }
}
 
namespace Nowcom.Quicksilver.Patterns
{
    using System.ComponentModel.Composition;
    using System.Collections.Generic;
    using System.Linq;
 
    public class StrategyContext<T,V>
    {
        private List<Strategy<T,V>> _Strategies { get; set; }
 
        public StrategyContext(params Strategy<T, V>[] strategies)
        {
            _Strategies = strategies.ToList();
        }
 
        public V Evaluate(T input)
        {
            var result = default(V);
            foreach(var strategy in _Strategies)
            {
                result = strategy.Evaluate(input);
                
                if (result != null)
                    break;
            }
 
            return result;
        }
    }
}
by Robert Kozak
  April 21, 2010 @ 12:33pm
Tags:

Add a comment


Report Abuse
brought to you by:
West Wind Techologies



If you find this site useful and use it frequently please consider making a donation to support this free service.
Donate