asp.net—策略模式
一、什么是策略模式
定义:定义一系列算法,把一个个算法封装成独立类并实现同一个接口,使得它们之间可以相互替换。
二、怎么使用策略模式
首先模拟一个场景:有一个用户想买车。 可以有多种方式买车:
(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—策略模式的更多相关文章
- ASP.net之策略模式
设计思路: 用ASP.net设计,调用策略模式.在第一个数和第二个数的文本框中输入数值,单击录题按钮,数值保存在n1,n2文档中,把要做的题都保存完后,单击开始按钮,开始做题,做完单击判断按钮,进行判 ...
- 封装,策略模式,Asp换脸
1.简单封装 1>计算类 using System; using System.Collections.Generic; using System.Linq; using System.Text ...
- ASP.NET四则运算--策略模式
在ASP.NET中实现四则运算,同样使用了类的封装,以及策略模式.只不过是把封装的类.前台代码以及后台的代码分离开来,但同样是要达到功能的实现. Calculator.cs using System; ...
- 计算器软件的代码实现 (策略模式+asp.net)
一 策略模式代码的编写 using System; using System.Collections.Generic; using System.Linq; using System.Web; /// ...
- 策略模式,ASP.NET实现
策略模式,ASP.NET实现 using System; using System.Collections.Generic; using System.Linq; using System.Web; ...
- 计算器软件实现系列(五)策略模式+asp.net
一 策略模式代码的编写 using System; using System.Collections.Generic; using System.Linq; using System.Web; /// ...
- asp.net core 集成JWT(二)token的强制失效,基于策略模式细化api权限
[前言] 上一篇我们介绍了什么是JWT,以及如何在asp.net core api项目中集成JWT权限认证.传送门:https://www.cnblogs.com/7tiny/p/11012035.h ...
- ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现
ASP.NET MVC 学习笔记-2.Razor语法 1. 表达式 表达式必须跟在“@”符号之后, 2. 代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...
- 设计模式:策略模式(Strategy)
定 义:它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化, 不会影响到使用算法的客户. 示例:商场收银系统,实现正常收费.满300返100.打8折.......等不同收费 ...
随机推荐
- 第七章 二叉搜索树 (d2)AVL树:插入
- 百度BAE的使用
- getchar()、putchar()、gets()、puts()、cin.get()、cin.getline()、getline()
1.getchar: 原型为int getchar(void). 它从stdin里读取一个字符.返回值为用户输入的ASCⅡ码,出错返回-1. eg:c=getchar(). 2.putchar: 原型 ...
- Oracle的下载、安装和配置
win10下Oracle的下载.安装和配置 --------------siwuxie095 1.首先到Oracle官网下载Oracle,中文版官网,传送阵:点 ...
- 【校招面试 之 C/C++】第8题 C++中的静态绑定与动态绑定
转自:https://blog.csdn.net/chgaowei/article/details/6427731 做了部分修改 为了支持c++的多态性,才用了动态绑定和静态绑定.理解他们的区别有 ...
- python之ftp作业【还未完成】
作业要求 0.实现用户登陆 1.实现上传和下载 3.每个用户都有自己的家目录,且只可以访问自己的家目录 4.对用户进行磁盘配额,每个用户的空间不同,超过配额不允许下载和上传 5.允许用户在指定的家目录 ...
- Extjs面板和布局初探
面板相当于一张干净的白纸,如果直接在上面添加内容,将很难控制面板中内容的显示位置,面板元素越多就越显得凌乱,所以需要在面板上划分不同的区域,将面板内容展示到希望的位置上.ExtJS通过提供多种布局类来 ...
- springmvc中Controller方法的返回值
1.1 返回ModelAndView controller方法中定义ModelAndView对象并返回,对象中可添加model数据.指定view. 1.2 返回void 在controller方法形参 ...
- struts框架值栈问题三之值栈的创建和ActionContext对象的关系
3. 问题三 : 值栈对象的创建,ValueStack 和 ActionContext 是什么关系? * 值栈对象是请求时创建的 * ActionContext是绑定到当前的线程上(一个Action访 ...
- Java WebService 知识点汇总
java webservice 获取传入IP axis.jar servlet.jar MessageContext mMsgContext = MessageContext.getCurren ...