ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#-设计模式-策略模式

2019-03-14 10:40:47  阅读:251  来源: 互联网

标签:num1 num2 C# decimal 模式 算法 GetResult 设计模式 public


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

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

标签:num1,num2,C#,decimal,模式,算法,GetResult,设计模式,public
来源: https://www.cnblogs.com/gamov/p/10523357.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有