Skip to content

Instantly share code, notes, and snippets.

@jmarnold
Created July 9, 2011 21:09
Show Gist options
  • Save jmarnold/1073964 to your computer and use it in GitHub Desktop.
Save jmarnold/1073964 to your computer and use it in GitHub Desktop.
Compositional Patterns: Policies
public class DefaultPolicy : IPolicy
{
public bool Matches()
{
return true;
}
public void Execute()
{
// default behavior
}
}
public interface IPolicy
{
bool Matches();
void Execute();
}
public class PolicyConsumer
{
private readonly IEnumerable<IPolicy> _policies;
public PolicyConsumer(IEnumerable<IPolicy> policies)
{
var configuredPolicies = new List<IPolicy>();
configuredPolicies.AddRange(policies);
configuredPolicies.Add(new DefaultPolicy()); // make sure this is last
_policies = configuredPolicies;
}
public void Execute()
{
var policy = _policies
.FirstOrDefault(p => p.Matches());
if(policy == null)
{
// throw, log, etc.
return;
}
policy.Execute();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment