策略模式

简介: 策略模式分析       它定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。     策略模式的结构图:       在策略模式中,核心代码为: 在此模式中,主要通过对Context创建时,传入一个具体的策略,再通过Context的ContextInterface()方法中调用具体策略的算法,实现对具体策略的选择和创建的  (如下:客户端代码)。


策略模式分析

      它定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户


    策略模式的结构图:

   


  在策略模式中,核心代码为:



在此模式中,主要通过对Context创建时,传入一个具体的策略,再通过Context的ContextInterface()方法中调用具体策略的算法,实现对具体策略的选择和创建的  (如下:客户端代码)。


    


策略模式示例

       现在要实现对学生的排序,现有三种排序方法,分别为:按照姓名排序,按照学号排序,按照学生成绩进行排序(其实最后一种排序方法是我最抵触的唉~桑心~) 用策略模式描述为:


   


   代码如下:

  

    抽象的分类方法类和具体的分类方法类:

abstract class SortMethod  //排列方法
    {
        
        public abstract void GetSortedStu();

    }

    class SortByName:SortMethod  //按照学生的姓名进行排列
    {
        public override void GetSortedStu()
        {
            Console.WriteLine("(此处写具体的排列方法)这是按照学生的姓名进行排列的。");
        }
 
    }

    class SortedByStuNum : SortMethod  //按照学生的学号进行排列
    {
        public override void GetSortedStu()
        {
            Console.WriteLine("(此处写具体的排列方法)这是按照学生的成绩进行排列的。");
           
        }
    }

    class SortedByMark : SortMethod //按照学生的成绩进行排列
    {
        public override void GetSortedStu()
        {
            Console.WriteLine("(此处写具体的排列方法)这是按照学生的分数进行排列");
        }
    }

Context类:


class SortContext
    {
        private SortMethod sm ; //声明一个抽象的分类方法

        public SortContext(SortMethod sortmethod)  //构造方法
        {
            this.sm = sortmethod;  //将构造方法中的分类方法赋值给本类对象,此处传入了具体的策略
 
        }

        public void Sort()
        {
            sm.GetSortedStu();  //根据传入的具体策略,调用它们相应的分类方法
        }
    }


客户端代码:

class Program
    {
        static void Main(string[] args)
        {
            SortContext sc;

            sc = new SortContext(new SortByName());  //按照名字分类
            sc.Sort();

            sc = new SortContext(new SortedByStuNum());  //按照学号分类
            sc.Sort();

            sc = new SortContext(new SortedByMark());   //按照成绩分类
            sc.Sort();

        }
    }

   当我们要改变分类方式,比如,现在增加一个按照家乡排序的方法,或者当我们要改变某一种具体的排列方式,比如,按照学号递减的顺序排列。。等需求的变动时,我们修改起来比较容易。


策略模式优点

   策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。

    策略模式的Strategy类层为Context定义了一系列的可供重用的算法或行为。继承有助于析取出这些算法中的公共功能。

   简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。





目录
相关文章
|
2月前
|
设计模式 算法 C#
C# 一分钟浅谈:策略模式与状态模式
【10月更文挑战第13天】本文介绍了两种常见的行为型设计模式:策略模式和状态模式。策略模式通过封装一系列算法并使其可互换,实现算法的灵活变化;状态模式则通过改变对象的内部状态来改变其行为。文章通过C#代码示例详细说明了这两种模式的应用场景、常见问题及解决方法。
54 19
|
3月前
|
设计模式 算法 搜索推荐
策略模式的小记
本文介绍了策略模式的概念、结构和使用场景,并通过支付系统的例子展示了如何使用策略模式来动态选择不同的支付策略,包括定义支付策略接口、实现具体的支付策略类、创建上下文类以及在客户端动态选择支付策略。
策略模式的小记
|
7月前
|
算法 数据安全/隐私保护
行为型 策略模式
行为型 策略模式
35 1
|
设计模式 算法 Java
什么场景要使用策略模式,什么场景不能使用?
如果,让我来设计,我最先想到的就是策略模式。另外,我把往期面试题解析的配套文档我已经准备好,想获得的可以在我的煮叶简介中找到。那么什么场景要使用策略模式,什么场景又不应该使用策略模式呢?我们可以先来看官方对策略模式的定义。
166 0
|
前端开发
策略模式
策略模式
80 0
|
设计模式 算法
策略模式详细介绍
策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列的算法,并将每个算法封装到具有共同接口的独立类中,使得它们可以互相替换。策略模式可以让算法的变化独立于使用它的客户端。
129 0
|
算法 测试技术 C#
C#策略模式
C#策略模式
70 0
|
设计模式 前端开发
关于策略模式我所知道的
关于策略模式我所知道的
88 0
|
算法 程序员 开发工具
简单说说我对策略模式的了解
简单说说我对策略模式的了解
89 0