码迷,mamicode.com
首页 > Windows程序 > 详细

8.4.3 C# 决策树

时间:2014-12-06 11:25:34      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:设计模式   面向对象   实用函数编程   函数编程   f#   

8.4.3 C# 决策树

 

在第五章,我们讨论过 F# 的差别联合和 C# 中的类层次结构之间的关系。在此示例中,我们将使用另一个种类层次结构表示决策树的节点,派生两个额外的类来表示两种不同情况(最后结果和查询)。

在函数式版本中,所有的处理逻辑都是在 testClientTree 函数中分别实现的。我们以面向对象的风格,使用访问者模式(visitor pattern)(在第七章讨论过),虽然也能做到这一点,但这并不是正宗的面向对象解决方案。这里,我们不需要实现函数分别处理决策树,所以,可以用更一般的面向对象技术,继承和虚方法。

清单 8.17 显示了基类(Decision)和两个派生类中较简单的一个(ResultDecision),表示最终结果。

 

清单 8.17 面向对象的决策树 (C#)

abstract class Decision { 

  public abstract void Evaluate(Clientclient);     [1]

class ResultDecision : Decision { 

  public bool Result { get; set;} 

  public override void Evaluate(Clientclient) {    [2]

   Console.WriteLine("OFFER A LOAN: {0}", Result ? "YES" :"NO"); 

  } 

}

 

这部分代码相当简单。基类只包含一个虚方法[1],将在派生类中实现,检查客户并输出结果。在表示最终结果的类中的实现[2],输出结果到控制台。

更重要的部分是实现表示查询的类。问题是我们需要为每个具体查询提供不同的代码(检查收入,当前工作年限,等等)。我们可以为每个查询创建一个新的派生类,与 Evaluate 方法的实现类似,但感觉并不是好的解决方案,因为,涉及代码重复。更好的实现方法是使用模板方法(template method)的设计模式。

8.4.3 C# 决策树

标签:设计模式   面向对象   实用函数编程   函数编程   f#   

原文地址:http://blog.csdn.net/hadstj/article/details/41773909

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!