簡體   English   中英

裝飾器未實現修飾的接口

[英]Decorator not implementing decorated interface

我有一個小項目,其中將一個類的對象與另一個類包裝在一起。 裝飾類實現一個接口,但裝飾器類不實現該接口。 我很好奇它仍然是裝飾器模式還是其他模式,在我的項目中應該將“ Decorator”類稱為Wrapper而不是Decorator。

我已經檢查了iluwatar github存儲庫( https://github.com/iluwatar/java-design-patterns/tree/master/decorator/src/main/java/com/iluwatar/decorator )和tutorialspoint( https:// www。 tutorialspoint.com/design_pattern/decorator_pattern )。 例如在iluwatar中有:裝飾器:

public class ClubbedTroll implements Troll

裝飾:

public class SimpleTroll implements Troll

在這兩種情況下(iluwatar和tutorialspoint),裝飾器和裝飾類中都有通用的接口實現。 這是否意味着必須將其稱為裝飾器設計模式?

我想說的是,如果您沒有在裝飾器中實現該接口,則它根本無法像原始對象(裝飾)那樣工作。 如果要實現接口,則可以在原始接口(如果有類)中使用裝飾器的任何地方。 這就是為什么您必須使用該界面。

如果只包裝裝飾物,則有一個包裝紙(委托模式)。

Decrator模式的本質是在不擴展對象的情況下向其添加其他功能。 關鍵字是extra ,這意味着對象的公共API(或接口)仍然保持不變。 沒有這個概念,就沒有使用裝飾器的意義。

所以問題實際上是“一個對象是否仍在不實現interface情況下提供了相同的公共API?”

恕我直言,可以用其他某種語言來實現,但是在Java中沒有意義,因為您不能保證一個對象具有相同的公共API,因此只能依靠它。

對於包裝器-這是適配器模式的另一個名稱。

暫無
暫無

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

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