Content deleted Content added
m Fixed typos (via WP:JWB) |
m corrected compilation error |
||
(2 intermediate revisions by 2 users not shown) | |||
Line 1:
{{
[[
In computer programming, the '''specification pattern''' is a particular [[software design pattern]], whereby [[business rules]] can be recombined by chaining the business rules together using [[boolean algebra|boolean logic]]. The pattern is frequently used in the context of [[___domain-driven design]].
Line 11:
== Code examples ==
===
{{Further|C Sharp (programming language)}}
<syntaxhighlight lang="csharp">
public interface ISpecification
Line 56:
public class AndSpecification : CompositeSpecification
{
private ISpecification
private ISpecification
public AndSpecification(ISpecification left, ISpecification right)
{
}
public override bool IsSatisfiedBy(object candidate)
{
return
}
}
Line 73:
public class AndNotSpecification : CompositeSpecification
{
private ISpecification
private ISpecification
public AndNotSpecification(ISpecification left, ISpecification right)
{
}
public override bool IsSatisfiedBy(object candidate)
{
return
}
}
Line 90:
public class OrSpecification : CompositeSpecification
{
private ISpecification
private ISpecification
public OrSpecification(ISpecification left, ISpecification right)
{
}
public override bool IsSatisfiedBy(object candidate)
{
return
}
}
Line 107:
public class OrNotSpecification : CompositeSpecification
{
private ISpecification
private ISpecification
public OrNotSpecification(ISpecification left, ISpecification right)
{
}
public override bool IsSatisfiedBy(object candidate)
{
return
}
}
Line 124:
public class NotSpecification : CompositeSpecification
{
private ISpecification
public NotSpecification(ISpecification x)
{
}
public override bool IsSatisfiedBy(object candidate)
{
return !
}
}
</syntaxhighlight>
===
{{Further|C Sharp (programming language)}}
<syntaxhighlight lang="csharp">
public interface ISpecification<T>
Line 169:
public class AndSpecification<T> : CompositeSpecification<T>
{
private ISpecification<T>
private ISpecification<T>
public AndSpecification(ISpecification<T> left, ISpecification<T> right)
{
}
public override bool IsSatisfiedBy(T candidate) =>
}
public class AndNotSpecification<T> : CompositeSpecification<T>
{
private ISpecification<T>
private ISpecification<T>
public AndNotSpecification(ISpecification<T> left, ISpecification<T> right)
{
}
public override bool IsSatisfiedBy(T candidate) =>
}
public class OrSpecification<T> : CompositeSpecification<T>
{
private ISpecification<T>
private ISpecification<T>
public OrSpecification(ISpecification<T> left, ISpecification<T> right)
{
}
public override bool IsSatisfiedBy(T candidate) =>
}
public class OrNotSpecification<T> : CompositeSpecification<T>
{
private ISpecification<T>
private ISpecification<T>
public OrNotSpecification(ISpecification<T> left, ISpecification<T> right)
{
}
public override bool IsSatisfiedBy(T candidate) =>
}
Line 230:
</syntaxhighlight>
===
{{Further|Python (programming language)}}
<syntaxhighlight lang="python">
from abc import ABC, abstractmethod
Line 278 ⟶ 279:
</syntaxhighlight>
===
{{Further|C++}}
<syntaxhighlight lang="cpp">
template <class T>
Line 421 ⟶ 423:
</syntaxhighlight>
===
{{Further|TypeScript}}
<syntaxhighlight lang="typescript">
export interface ISpecification {
Line 510 ⟶ 512:
==Example of use==
In the
# they are overdue,
Line 523 ⟶ 525:
<syntaxhighlight lang="csharp">
var
var noticeSent = new NoticeSentSpecification();
var inCollection = new InCollectionSpecification();
// Example of specification pattern logic chaining
var sendToCollection =
var
foreach (var
{
if (sendToCollection.IsSatisfiedBy(
{
}
}
Line 554 ⟶ 556:
* [https://web.archive.org/web/20110724151447/http://www.dpdk.nl/opensource/specification-pattern-for-selection-on-lists specification pattern in flash actionscript 3] by Rolf Vreijdenberger
{{Design
[[Category:Architectural pattern (computer science)]]
[[Category:Articles with example C Sharp code]]▼
[[Category:Software design patterns]]
[[Category:Programming language comparisons]]
<!-- Hidden categories below -->
▲[[Category:Articles with example C Sharp code]]
[[Category:Articles with example C++ code]]
[[Category:Articles with example JavaScript code]]
[[Category:Articles with example Python (programming language) code]]
|