Language: C#
A Generic Strategy Pattern in C#
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; } } }
Tags:
Report Abuse
Subscribe
Discuss
What's new
What is it
New Snippet
Recent Snippets
My Snippets
Web Code
Search

