一、什么是策略模式

  定义:定义一系列算法,把一个个算法封装成独立类并实现同一个接口,使得它们之间可以相互替换。

二、怎么使用策略模式

  首先模拟一个场景:有一个用户想买车。  可以有多种方式买车:

  (1)我是土豪,全款买

  (2)5成首付,5成贷款

  (3)0首付,全贷款

  抽象策略:定义一个行为接口, 接口内定义一个买车的方法  

//定义一个策略行为接口
public interface IStrategy
{
//购车
void BuyCar()
}

  具体策略:把购车方式看作一个个算法封装成独立类并实现购车行为

//购车方式 1
public class FullBuy : IStrategy
{
public void BuyCar()
{
Console.WriteLine("我是土豪,全款买");
}
}
//购车方式 2
public class HalfLoan : IStrategy
{
public void BuyCar()
{
Console.WriteLine("5成首付,5成贷款");
}
}
//购车方式 3
public class FullLoan : IStrategy
{
public void BuyCar()
{
Console.WriteLine("0首付,全贷款 ");
}
}

  环境角色:一个可以维护买车策略的对象

//定义一个类维护操作策略
public class StrategyContext
{
private IStrategy _myStrategy;
//初始化并传入具体购车方式
public StrategyContext(IStrategy myStrategy)
{
this._myStrategy = myStrategy;
}
//设置具体购车方式
public void SetStrategy(IStrategy myStrategy)
{
this._myStrategy = myStrategy;
} public void ExecBuy()
{
this._myStrategy.BuyCar();
}
}
//程序入口
public class Program
{
public static void Main(string[] args)
{
//创建购车方式
IStrategy strategy = new FullBuy();
//创建操作策略
StrategyContext myContext = new StrategyContext(strategy);
//买车
myContext.ExecBuy();
}
}

三、为什么使用策略模式

  在有多种算法相似的情况下,避免使用多重条件语句(使用 if...else 不易维护)  

 //不使用策略模式情况下,实现上面的场景则会使用if...else 或者 switch ... case
//如果需增加购车方式(或者BuyType改变)则会修改下面代码
//不符合开闭原则(即对扩展开放,对修改关闭)
if (BuyType = )
Console.WriteLine("我是土豪,全款买");
else if (BuyType = )
Console.WriteLine("5成首付,5成贷款");
else if (BuyType = )
Console.WriteLine("0首付,全贷款 ");

四、应用场景(引用百科)  

  1、 多个类只区别在表现行为不同,可以使用策略模式,在运行时动态选择具体要执行的行为。

  2、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。  

  3、 对客户隐藏具体策略(算法)的实现细节,彼此完全独立。

asp.net—策略模式的更多相关文章

  1. ASP.net之策略模式

    设计思路: 用ASP.net设计,调用策略模式.在第一个数和第二个数的文本框中输入数值,单击录题按钮,数值保存在n1,n2文档中,把要做的题都保存完后,单击开始按钮,开始做题,做完单击判断按钮,进行判 ...

  2. 封装,策略模式,Asp换脸

    1.简单封装 1>计算类 using System; using System.Collections.Generic; using System.Linq; using System.Text ...

  3. ASP.NET四则运算--策略模式

    在ASP.NET中实现四则运算,同样使用了类的封装,以及策略模式.只不过是把封装的类.前台代码以及后台的代码分离开来,但同样是要达到功能的实现. Calculator.cs using System; ...

  4. 计算器软件的代码实现 (策略模式+asp.net)

    一 策略模式代码的编写 using System; using System.Collections.Generic; using System.Linq; using System.Web; /// ...

  5. 策略模式,ASP.NET实现

    策略模式,ASP.NET实现 using System; using System.Collections.Generic; using System.Linq; using System.Web; ...

  6. 计算器软件实现系列(五)策略模式+asp.net

    一 策略模式代码的编写 using System; using System.Collections.Generic; using System.Linq; using System.Web; /// ...

  7. asp.net core 集成JWT(二)token的强制失效,基于策略模式细化api权限

    [前言] 上一篇我们介绍了什么是JWT,以及如何在asp.net core api项目中集成JWT权限认证.传送门:https://www.cnblogs.com/7tiny/p/11012035.h ...

  8. ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现

    ASP.NET MVC 学习笔记-2.Razor语法   1.         表达式 表达式必须跟在“@”符号之后, 2.         代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...

  9. 设计模式:策略模式(Strategy)

    定   义:它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化, 不会影响到使用算法的客户. 示例:商场收银系统,实现正常收费.满300返100.打8折.......等不同收费 ...

随机推荐

  1. 各种语言使用HTTP Request

    1. JAVA String requestContent = "{"id":"1","sort":"des" ...

  2. ArrayList LinkList比较

    1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构.      2.对于随机访问get和set,ArrayList优于LinkedList,因为ArrayLi ...

  3. K.O. -------- Eclipse中Maven的报错处理

    ----------------------siwuxie095                                 K.O. -------- Eclipse 中 Maven 的报错处理 ...

  4. .NET中的文件IO操作实例

    1.写入文件代码: //1.1 生成文件名和设置文件物理路径 Random random = new Random(DateTime.Now.Millisecond); ); string Physi ...

  5. rapidjson使用

    Value构造 Value对象最好先声明后初始化,如果声明直接初始化可能出错. rapidjson::Value a; a = val[i]; Value传参 Value传参,最好显式使用右值,如st ...

  6. Dom对象总结介绍&事件介绍&增删查找标签

    1.dom有5个属性,属性内容如下 下面开始介绍Dom属性,一共有5个属性 1.document object:文档对象 2.element object:标签对象 3.test object:文本对 ...

  7. pyhon之函数参数

    #函数的参数分为形参和实参,其中形参就是形式参数,是在创建函数的时候定义,实参就是实际参数,是在调用的函数的时候创建,这个并不是重点,具体#的参数内部,我们可以把参数分为以下4种# 1.普通参数# 2 ...

  8. ubuntu18 realsenseD435i

    (flappbird) luo@luo-All-Series:~/librealsense/build201901/tools/enumerate-devices$ ./rs-enumerate-de ...

  9. 注册带有Portal功能的DYN365_ENTERPRISE_PLAN1地址

    使用官方进入的注册页面注册后试用,发现没有Portal功能. https://trials.dynamics.com/Dynamics365/Signup 使用以下的地址注册可以产生Portal ht ...

  10. 部署maven的一些要点、遇到的问题

    一. maven环境的搭建 . 下载并配置maven(可做可不做) ()到http://maven.apache.org下载maven的最新版本,并解压到某一目录(假设是d:\develop\apac ...