. Net Strategy Mode

Source: Internet
Author: User
Directory
    1. Definition
    2. UML
    3. Participants
    4. 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

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.