8.4.3 C# 決策樹

來源:互聯網
上載者:User

標籤:設計模式   物件導向   實用函數編程   函數編程   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# 決策樹

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.