当前位置: 首页 > 编程笔记 >

浅析.net策略模式

翁俊良
2023-03-14
本文向大家介绍浅析.net策略模式,包括了浅析.net策略模式的使用技巧和注意事项,需要的朋友参考一下

对于策略模式的理解:当一个业务有多种需求时候,在某个时候需要使用不同的方式来计算结果。这时候不同的方式可以理解为不同的策略来解决同样的问题。 例如:商场收银系统计算价格,1:正常计算 2:商品打折计算,3:满300减100等方式。就可以按三种策略来处理需求。

简单的说:策略模式就是用来封装算法的,但在实践中,我们发现可以用他来封装几乎任何类型的规则,只要在分析过程中听到需要在不同的时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace DesignModel

{

    /// <summary>

    /// 策略模式

    /// </summary>

    public class TacticsModel

    {

        public string type { get; set; }

        public virtual string GetResult()

        {

            return "";

        }

    }

    public class Normal:TacticsModel

    {

        public override string GetResult()

        {

            return "正常计算价格";

        }

    }

    public class Discount : TacticsModel

    {

        public override string GetResult()

        {

            return "按打折计算价格";

        }

    }

    public class Preferential : TacticsModel

    {

        public override string GetResult()

        {

            return "满300减100活动";

        }

    }

    public class CashContext

    {

        TacticsModel tm = null;

        public CashContext(string type)

        {

            switch (type)

            {

                case "1":

                    tm = new Normal();

                    break;

                case "2":

                    tm = new Discount();

                    break;

                case "3":

                    tm = new Preferential();

                    break;

                default:

                break;

             }

        }

        public string GetResult()

        {

            return tm.GetResult();

        }

    }

}

这种方式和简单工厂方式差不多,只是有稍微区别。 简单工厂模式需要暴漏给客户端两个类,策略模式和工厂模式的简单结合只暴漏了一个CashContext类

客户端调用代码


   Console.WriteLine("请计算类型1正常,2打折,3优惠:");

   string type = Console.ReadLine();

   CashContext cc = new CashContext(type);

   Console.WriteLine(cc.GetResult());


结果:

其中还是使用了swich ,也就是就是说增加一种需求就有更改swith语句,很是不爽,不过任何需求的变更都是需要成本的。

只是成本的高低是有区别的。这个地方用反射技术会有更好的效果。后续会补充。

 类似资料:
  • 本文向大家介绍浅析.net简单工厂模式,包括了浅析.net简单工厂模式的使用技巧和注意事项,需要的朋友参考一下 编程时一门技术,更是一门艺术 简单工厂模式利用面向对象方式通过继承、封装、多态把程序的耦合度降低,设计模式使得程序更加灵活,容易修改,易于复用。 下面是服务器计算器代码: 基本验证没加,学习练习的同学可以自己加上 28种设计模式后续更新 本文就是.net设计模式中的简单工厂模式的内容了,

  • 主要内容:介绍,实现,Strategy.java,OperationAdd.java,OperationSubtract.java,OperationMultiply.java,Context.java,StrategyPatternDemo.java在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 contex

  • 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。 介绍 意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。 主要解决:在有多种算法相似的情况下,使用 if...

  • 问题 解决问题的方式有多种,但是你需要在程序运行时选择(或是转换)这些方法。 解决方案 在策略对象(Strategy objects)中封装你的算法。 例如,给定一个未排序的列表,我们可以在不同情况下改变排序算法。 基类 StringSorter = (algorithm) -> sort: (list) -> algorithm list 策略 bubbleSort = (list) -

  • 应用场景 一个商场收银软件,营业员根据客户所购买的商品的单价和数量,向客户收费 用两个文本框来输入单价和数量,一个确定按钮来算出每种商品的费用,用个列表框来记录商品的清单,一个标签来记录总计,一个重置按钮来重新开始。 double total = 0.0d; private void btn0k_Click(object sender, EventArgs e) { double

  • 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。 介绍 意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。 主要解决:在有多种算法相似的情况下,使用 if...