zoukankan      html  css  js  c++  java
  • C#-设计模式-策略模式

    1.定义

    将会经常改变的算法,封装在接口中,在算法更改时,只需要为接口添加新的实现,而不需要修改原有的算法。

    2.代码实现

    public interface Calculatable
    {
        decimal GetResult(decimal num1, decimal num2);
    }
    
    public class Add : Calculatable
    {
        public decimal GetResult(decimal num1, decimal num2)
        {
            return num1 + num2;
        }
    }
    
    public class Reduce : Calculatable
    {
        public decimal GetResult(decimal num1, decimal num2)
        {
            return num1 - num2;
        }
    }
    
    public class Multiplication : Calculatable
    {
        public decimal GetResult(decimal num1, decimal num2)
        {
            return num1 * num2;
        }
    }
    
    public class Division : Calculatable
    {
        public decimal GetResult(decimal num1, decimal num2)
        {
            if (num2 == 0) return 0;
            return num1 / num2;
        }
    }

    由一个计算接口,派生出4个运算类,分别是加减乘除,调用的时候;

    Calculatable cal = new Add();
    cal.GetResult(1, 2);

    当需要更换算法的时候只需要将接口的实现换成另一个算法类即可,如果使用IOC,还可以将实现放到配置文件中,起到动态更换算法的功能。

    3.特点

    优点:将算法的变化进行抽离和封装,因此当算法更换时,不需要更改代码,只需要对接口进行新的实现就行了

    缺点:如果算法比较多的时候,策略类(实现策略接口的类)就会比较多,而且比较坑爹的是,每一个策略类中只有一个public方法,比较浪费

    如果优化的话,可以使用抽象类,将变化的算法设为抽象方法,或虚方法,这样让子类对该方法进行实现即可,同样可以实现该需求,而且代码重用性应该会更好

  • 相关阅读:
    顶目群定义及项目群管理
    项目管理与项目组合管理的不同
    IT项目经理:人际关系技能和领导技能的重要性
    IT 项目经理的职业生涯
    Sharepoint2010 中隐藏 "快速启动"与"最近修改'
    3 个基本的IT项目组合种类
    项目成功的标志及决定因素
    HDL,你们作对了吗?
    JAVA代码编写的30条建议
    八款开源 Android 游戏引擎
  • 原文地址:https://www.cnblogs.com/gamov/p/10523357.html
Copyright © 2011-2022 走看看