策略模式学习总结

目录

策略模式

引言

定义

模式结构图

实例

实例说明

实例类图

代码实现

总结

模式优点

模式缺点 


策略模式

引言

策略模式对应于解决某一问题的一个算法族,允许用户从该算法族中任选一个算法解决某一个问题,同时可以方便地更换或者增加新的算法。

定义

英文定义:“Define a family of algorithms,encapsulate each one,and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it”。

中文定义:定义一系列算法,将每一个算法封装起来,并让他们可以互相替换。策略模式让算法独立于使用·它们的客户而变化。

                                            策略模式重要等级★★★★☆     策略模式难度等级★★☆☆☆ 

模式结构图

实例

实例说明

旅游出行可以有多种,可以坐飞机,可以乘火车,还可以骑自行车。使用策略模式来模拟这一过程。

实例类图

代码实现

环境类Person

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


class Person
{
    private TravelStrategy strategy;

    internal TravelStrategy Strategy
    {
        get
        {
            return strategy;
        }

        set
        {
            strategy = value;
        }
    }

    public void Travel()
    {
        strategy.Travel();
    }
}

策略接口

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

interface TravelStrategy
{
    void Travel();
}

具体策略类Airplan

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


public class AirPlanStrategy : TravelStrategy
{
    public void Travel()
    {
        Console.WriteLine("灰机出行。");
    }
}

具体策略类Train

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


class TrainStrategy : TravelStrategy
{
    public void Travel()
    {
        Console.WriteLine("火车出行。");
    }
}

具体策略类Bicyle

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


class BicyleStrategy : TravelStrategy
{
    public void Travel()
    {
        Console.WriteLine("自行车出行.");
    }
}

测试代码

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading;

class Program
{
    static void Main(string[] args)
    {
        Person p = new Person();

        //这一行代码可以做到配置文件,即可动态选择策略
        p.Strategy = new AirPlanStrategy();

        p.Travel();
        Console.ReadKey();
    }
}

运行截图

总结

模式优点

1)策略模式提供了对“开闭原则”的完美支持,用户可以在不修改原有的系统的基础上选择算法或行为,也可以灵活的增加新的算法或行为。

2)策略模式提供了管理相关的算法族的方法。策略类的等级结构定义了一个算法或者行为族,恰当使用继承可以把公共的代码移到父类里,从而避免重复的代码。

3)使用策略模式可以减少使用多重条件转移语句(if else)

模式缺点 

1)客户端必须知道所有策略类,并自行决定使用那个策略类。

2)策略模式将造成产生很多策略类和对象。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
针对高中python语言设计这门课程,教学目标可以包括: 1. 熟练掌握Python语言的基础语法和常用库函数; 2. 能够使用Python语言解决实际问题; 3. 了解Python语言在数据科学、人工智能等领域的应用。 发现式学习模式是一种基于学生自主探究和发现的学习方式,可以激发学生的学习兴趣和主动性。在教学设计中,可以采用以下策略: 1. 提供足够的学习资源,例如Python编程教材、代码示例、视频教程、在线编程练习平台等,让学生自主选择学习内容和方式; 2. 鼓励学生在学习过程中尝试不同的解决方案和编程方法,通过自己的实践和错误来发现和掌握知识; 3. 提供必要的指导和反馈,例如答疑、评估、分享等,帮助学生更好地理解和应用所学知识。 抛锚式学习策略是一种针对学生学习困难的策略,可以通过以下方式应用于教学设计: 1. 在教学过程中,及时发现和记录学生的困难点和错误,例如常见的语法错误、逻辑错误、调试错误等; 2. 针对不同的错误和困难,提供相应的解决方案和支持,例如示范、提示、建议、反馈等; 3. 在学习过程中,引导学生思考和总结自己的学习经验和策略,例如如何调试代码、如何查找资料、如何解决错误等,帮助学生发现自己的学习锚点和方法。 以上是基于发现式学习和抛锚式学习策略的教学设计建议,希望能够对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值