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方法,比较浪费

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

  • 相关阅读:
    Robot FrameWork基础学习(二)
    如何做好接口测试?
    性能测试之Jmeter学习(十)
    性能测试之Jmeter学习(九)
    python基础数据类型的相关知识点
    python基础知识 -- set集合
    python基础小知识,is和==的区别,编码和解码
    python中的数据类型之元组和字典
    python中 列表常用的操作
    python中的字符串(str)操作
  • 原文地址:https://www.cnblogs.com/gamov/p/10523357.html
Copyright © 2011-2022 走看看