网站建设公司怎样选建设网站要什么手续
web/
2025/10/8 16:00:52/
文章来源:
网站建设公司怎样选,建设网站要什么手续,官方网站开发制作,公司没注册可以做网站吗Strategy模式是对算法的封装。即使是一个计算行为#xff0c;如果其实现有其多样性#xff0c;为达到易扩展的目的#xff0c;我们也有必要将其抽象出来#xff0c;以接口的形式来定义。由于充分利用了面向 对象的多态性#xff0c;在调用该行为时#xff0c;其具体的实现…Strategy模式是对算法的封装。即使是一个计算行为如果其实现有其多样性为达到易扩展的目的我们也有必要将其抽象出来以接口的形式来定义。由于充分利用了面向 对象的多态性在调用该行为时其具体的实现是在运行期决定的。以税收计算为例假定税收策略分为个人所得税和企业所得税。根据策略模式将税收策略抽象为接口ITaxStrategy public interface ITaxStrategy{ double Calculate(double income);} 各种税收策略均实现该类 public class PeronalTaxStrategy:ITaxStrategy{ public double Calculate(double income) { //实现 }}public class EnterpriseTaxStrategy:ITaxStrategy{ public double Calculate(double income) { //实现 }} 如果此时有一个公共的类提供税收的相关操作其中就包括计算所得税的方法 public class TaxOp{ private ITaxStrategy strategy; public TaxOp(ITaxStrategy strategy) { this.strategy strategy; } public double GetTax(double income) { return strategy.Calculate(income); }} 客户端调用 public class App{ public static void Main(string[] args) { TaxOp op new TaxOp(new PersonalTaxStrategy()); Console.WriteLine(The Personal Tax is :{0}, op.GetTax(1000)); }} 这是一种典型的面向对象的设计思路。然而对于一些简单的算法行为我们也可以利用delegate委托的方式来实现以上的设计它虽然更近似于面向过程的设计但其扩展性同样灵活。如果算法的逻辑不复杂且算法的实现处于某种待定的状态也许使用委托会比Strategy模式更方便。 我们同样利用上述的例子只是将原来抽象出来的接口修改为委托 public delegate double CalculateTax(double income); 对于个人所得税和企业所得税的实现相应修改为 public class Tax{ public static double CalculatePersonalTax(double income) { //实现 } public static double CalculateEnterpriseTax(double income) { //实现 }} 税收的公共类则修改如下 public class TaxOp{ private CalculateTax calDel; public TaxOp(CalculateTax calDel) { this.calDel calDel; } public double GetTax(double income) { return calDel(income); }} 客户端的调用 public class App{ public static void Main(string[] args) { TaxOp op new TaxOp(new CalculateTax(Tax.CalculatePersonalTax)); Console.WriteLine(The Personal Tax is :{0}, op.GetTax(1000)); }} 从这两个实现方案来看代码是大同小异的但设计思想则迥然不同。它是面向对象和面向过程的区别前者是将行为封装为对象而后者则直接对方法进行操作同时又利用delegate委托来实现扩展。个人意见我还是倾向于第一种方案但后者至少也提供了一种思路。尤有甚者我们也可以将委托理解为一种特殊的抽象因为其本质是函数指针它代表了一簇函数从而对具有相同特性的行为进行了普遍意义的抽象。也许这样可以促进对委托的理解。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/89137.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!