asp.net—策略模式
2024-08-25 06:42:33
一、什么是策略模式
定义:定义一系列算法,把一个个算法封装成独立类并实现同一个接口,使得它们之间可以相互替换。
二、怎么使用策略模式
首先模拟一个场景:有一个用户想买车。 可以有多种方式买车:
(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、 对客户隐藏具体策略(算法)的实现细节,彼此完全独立。
最新文章
- yaf在windows7下32位的安装教程
- hdu 1850 Being a Good Boy in Spring Festival(Nimm Game)
- Python list去重及找出,统计重复项
- JQuery中如何click中传递参数
- [总结]FFMPEG视音频编解码零基础学习方法
- (转)swfobject.js 详细解说
- Yii2 框架下bootstrap 弹窗预览视频等~
- js技巧之this,call,apply
- LeetCode - 492. Construct the Rectangle
- 使用react全家桶制作博客后台管理系统
- JS变量声明方式
- tomcat运行超时问题解决
- 为什么IIS的应用池回收设置默认为1740分钟-20180720
- JavaScript Math对象方法
- php实现支付宝授权登录
- 解决sublime install package连不上的问题
- 2017 Multi-University Training Contest - Team 7
- im-switch -s ibus错误:Error: no configuration file ";ibus"; exists.
- flume将数据发送到kafka、hdfs、hive、http、netcat等模式的使用总结
- 2016.8.17服务器端数据库用户导入导出方法 expdp和impdp