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方法,比较浪费
如果优化的话,可以使用抽象类,将变化的算法设为抽象方法,或虚方法,这样让子类对该方法进行实现即可,同样可以实现该需求,而且代码重用性应该会更好
标签:num1,num2,C#,decimal,模式,算法,GetResult,设计模式,public 来源: https://www.cnblogs.com/gamov/p/10523357.html