Directory
- Definition
- UML
- Participants
- Example
Definition:
PairAlgorithmIs the separation of algorithms and responsibilities.
UML:
Participants:
Abstract Policy (Strategy) Role: defines a method to implement the algorithm by an interface or abstract class.
Contretestrategy role: class used to implement the abstract role algorithm.
Environment (context) Role: Call a policy role.
Example:
Code Using System; Namespace Dofactory. gangoffour. Strategy. Structural { /// <Summary> /// Mainapp startup class for structural /// Strategy design pattern. /// </Summary> Class Mainapp { /// <Summary> /// Entry point into console application. /// </Summary> Static Void Main () {context; // Three contexts following different strategies Context = New Context ( New Concretestrategya (); context. contextinterface (); Context = New Context (New Concretestrategyb (); context. contextinterface (); Context = New Context ( New Concretestrategyc (); context. contextinterface (); // Wait for user Console. readkey ();}} /// <Summary> // The 'strategy' abstract class /// </Summary> Abstract Class Strategy { Public Abstract Void Algorithminterface ();} /// <Summary> /// A' concretestrategy' class /// </Summary> Class Concretestrategya: Strategy { Public Override Void Algorithminterface () {console. writeline (" Called concretestrategya. algorithminterface () ");}} /// <Summary> /// A' concretestrategy' class /// </Summary> Class Concretestrategyb: Strategy { Public Override Void Algorithminterface () {console. writeline (" Called concretestrategyb. algorithminterface () ");}} /// <Summary> /// A' concretestrategy' class /// </Summary> Class Concretestrategyc: Strategy { Public Override Void Algorithminterface () {console. writeline (" Called concretestrategyc. algorithminterface () ");}} /// <Summary> /// The 'context' class /// </Summary> Class Context { Private Strategy _ strategy; // Constructor Public Context (strategy Strategy ){ This . _ Strategy = strategy ;} Public Void Contextinterface () {_strategy. algorithminterface ();}}}
Output
Called concretestrategya. algorithminterface ()
Called concretestrategyb. algorithminterface ()
Called concretestrategyc. algorithminterface ()
Practical application:
Code Using System; Using System. Collections. Generic; Namespace Dofactory. gangoffour. Strategy. realworld { /// <Summary> /// Mainapp startup class for real-world /// Strategy design pattern. /// </Summary> Class Mainapp { /// <Summary> /// Entry point into console application. /// </Summary> Static Void Main (){ // Two contexts following different strategies Sortedlist studentrecords = New Sortedlist (); studentrecords. Add (" Samuel "); Studentrecords. Add (" Jimmy "); Studentrecords. Add ("Sandra "); Studentrecords. Add (" Vivek "); Studentrecords. Add (" Anna "); Studentrecords. setsortstrategy ( New Quicksort (); studentrecords. Sort (); studentrecords. setsortstrategy ( New Shellsort (); studentrecords. Sort (); studentrecords. setsortstrategy ( New Mergesort (); studentrecords. Sort (); // Wait for user Console. readkey ();}} /// <Summary> // The 'strategy' abstract class /// </Summary> Abstract Class Sortstrategy { Public Abstract Void Sort (list < String > List );} /// <Summary> /// A' concretestrategy' class /// </Summary> Class Quicksort: sortstrategy { Public Override Void Sort (list < String > List) {list. Sort (); // Default is quicksort Console. writeline (" Quicksorted list ");}} /// <Summary> /// A' concretestrategy' class /// </Summary> Class Shellsort: sortstrategy { Public Override Void Sort (list < String > List ){// List. shellsort (); Not-implemented Console. writeline (" Shellsorted list ");}} /// <Summary> /// A' concretestrategy' class /// </Summary> Class Mergesort: sortstrategy { Public Override Void Sort (list < String > List ){ // List. mergesort (); Not-implemented Console. writeline ("Mergesorted list ");}} /// <Summary> /// The 'context' class /// </Summary> Class Sortedlist { Private List < String > _ List = New List < String > (); Private Sortstrategy _ sortstrategy; Public Void Setsortstrategy (sortstrategy ){ This . _ Sortstrategy = sortstrategy ;} Public Void Add ( String Name) {_ list. Add (name );} Public Void Sort () {_ sortstrategy. Sort (_ list ); // Iterate over list and Display Results Foreach ( String Name In _ List) {console. writeline (" "+ Name) ;}console. writeline ();}}}
Output
Quicksorted list
Anna
Jimmy
Samuel
Sandra
Vivek
Shellsorted list
Anna
Jimmy
Samuel
Sandra
Vivek
Mergesorted list
Anna
Jimmy
Samuel
Sandra
Vivek