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折.......等不同收费 ...
随机推荐
- 文件的概念以及VC里的一些文件操作API简介
文件的基本概念 所谓“文件”是指一组相关数据的有序集合. 这个数据集有一个名称,叫做文件名. 实际上在前面的各章中我们已经多次使用了文件,例如源程序文件.目标文件.可执行文件.库文件 (头文件)等.文 ...
- spine
spine 英 [spʌɪn] 美 [spaɪn] n.脊柱;[动,植] 棘,刺(如刺猬和海胆的刺);鱼鳍的刺;植物上的刺
- javascript中Date使用
<script type="text/javascript"> //返回当前日期和时间 var newDate=new Date(); ...
- centos7下创建mysql5.6多实例
一.mysql安装目录说明mysql5.6以二进制安装包安装在/data/mysql56下数据目录为/data/mysql56/data下配置文件为/etc/my.cnf下 二.多实例目录说明/mys ...
- ecplise导入工程出现乱码的解决方案
eclipse之所以会出现乱码问题是因为eclipse编辑器选择的编码规则是可变的.一般默认都是UTF-8或者GBK,当从外部导入的一个工程时,如果该工程的编码方式与eclipse中设置的编码方式不同 ...
- sqlserver数据库维护常用sql
1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- 创建 备份 ...
- Macbook pro睡眠状态恢复后没声音的解决办法
杀招: sudo killall coreaudiod macos会自动重启进程,恢复声音
- 学习类App原型制作分享-Wokabulary
Wokabulary是一款多功能词汇学习App,可以学习多国语言词汇.原型的引导页面采用的图片+文字+分页器,需要注意的是分页器选中位置要与页面顺序一致.其次是语言的选择页面,在前面给大家介绍过滚动区 ...
- 2018秋季c语言基础课第一次作业
1)大学和高中最大的不同是没有人天天看着你,请看大学理想的师生关系是?有何感想? 答:邹欣老师提到了很多种关系,不外呼就是两种:平等或者不平等.平等的师生关系与陌生人无异,而自古以来尊师重道却被世人所 ...
- 2018.09.26 洛谷P2464 [SDOI2008]郁闷的小J(map+vector)
传送门 本来出题人出出来想考数据结构的. 但是我们拥有map+vector/set这样优秀的STL,因此直接用map离散化,vector存下标在里面二分找答案就行了. 代码: #include< ...