簡體   English   中英

在 Java 中,您將這種模式/習語稱為什么?

[英]In Java, what do you call this pattern/idiom?

我的Java 庫提供了一個接口SomethingClient和一個實現類SomethingClientImpl 如您所料,該接口包含由應用程序調用的方法。

但是有一個“鏡像”接口SomethingHandler ,其中包含應用程序提供的方法 - 應用程序回調。 你能想象的應用程序提供圖書館,此接口的對象-也許到工廠方法從SomethingClient被得到。

作為一個沒有經驗的 Java 設計師,我很想知道是否有一個名稱,以及是否/在多大程度上推薦,還提供一個結合了這兩個概念的接口和類:

public interface SomethingClient { /*..*/ }

public interface SomethingHandler { /*..*/ }

public interface ClientAndHandler extends SomethingClient, 
                                          SomethingHandler { }

public abstract class ClientAndHandler_Impl implements ClientAndHandler {

    final SomethingClient clientImpl_;

    ClientAndHandler_Impl(SomethingClient clientImpl) {
        this.clientImpl_ = clientImpl;
    }

    // TODO now all SomethingClient methods are implemented in terms of clientImpl_
    // AND, SomethingHandler methods are left abstract so they are implemented by the application
}

其目的是,應用程序編寫者可能更喜歡從ClientAndHandler_Impl抽象類擴展並實現回調方法,也許就客戶端(傳出)方法而言。 這可以相對容易地完成。 假設您會這樣做,您會給ClientAndHandler概念取什么名字?

骨架實現

您當前的代碼看起來有點像骨架實現。 您可以在麻省理工學院dzon上閱讀更多相關信息。

它背后的想法是為客戶端提供默認實現。 您可以在 Java-Collections-API 中找到一些示例,例如AbstractCollectionAbstractSetAbstractMap

一些建議

冗余接口

ClientAndHandler接口是多余的。 ClientAndHandler_Impl類應該實現SomethingClientSomethingHandler

命名

如果您想明確說明您使用的是骨架實現,我會將抽象類ClientAndHandler_Impl命名為AbstractClientInteractionClientInteractionSkeleton

首先,這不是設計模式。 它確實包含一個通過:委托模式

至於組合接口,我可能稱之為“復合標記接口”或其他東西。 我不知道任何可接受的名稱。

由於幾個原因,這很糟糕。 首先,我的類可以分別實現 A 和 B,但如果它不實現 AAndB,那么它就不會匹配這些方法的類型。 因此,通用類型的交集是可取的。

其次,我認為首先需要復合類型表明設計不佳。 類應該做一件事。 如果您正在實現兩個不同的接口,那么根據定義,您不會做一件事。

暫無
暫無

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

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