簡體   English   中英

這是什么? 模板方法還是什么?

[英]What is this? Template method or what?

我有一個 class Request.cs

它有一個抽象方法:

public abstract Response CreateResponse(XmlReader reader);

還有一個方法:

public Response SendRequest(string requestURI)
{
    ...

    XmlReader reader = XmlReader.Create(responseStream);

    return CreateResponse(reader);
}

CreateResponse method在擴展Request的子類中實現。 並且該實現返回響應。

我不明白你怎么能返回一個像這樣的抽象方法,但返回的值實際上是在子類的方法的實現中。 這是模板方法模式的一個例子還是只是簡單的多態性,或者這個“棘手或過於精明”的代碼甚至是混亂的? 我試圖弄清楚這甚至可以如何完成(這是基本的 OOP 主體或設計模式),這是 OOP 的良好實踐還是良好使用?

這是一種非常標准的方法。 事實上,它經常被推薦。 CreateResponse方法就像一個空白,必須由派生的 class 填充。

是的,這是模板方法。 由於響應 class 是抽象的,因此您必須在調用 SendRequest 之前實現 CreateResponse。 這樣,通用邏輯封裝在基礎 class 中,邏輯的 rest 可以根據需要進行更改(通過創建基類的多個實現)。

主要原因是當你使用方法時,你永遠不知道細節,只是定義了接口和抽象方法。

由於該方法是抽象的,因此沒有細節,因為它們必須由派生的 class 定義。 使這成為可能的主要觀點是,“INs”和“OUTs”永遠不會改變,因為方法在基礎中是抽象的,因此定義了接口,而不是實現......但是。

可以把它想象成有人出售從 A 點到 B 點的基本機票,但不知道要使用哪家航空公司。 他們還不知道您將如何到達那里,但是一旦他們將已售機票的合同移交給航空公司,該航空公司就會弄清楚滿足合同條款的細節。 買票時,您所關心的只是您知道從 A 到 B 可以花 x 美元。

這就是模板方法,而模板方法其實也不過是簡單的多態。 這正是典型的 C# / Java 風格的 OO 多態性旨在用於並且是該語言的良好用法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM