日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java中特质模式的定义

發布時間:2023/12/3 java 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中特质模式的定义 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在本文中,我將介紹特征的概念,并為您提供一個如何在Java中使用它們以在對象設計中減少冗余的具體示例。 我將首先提出一個虛構的案例,其中可以使用特征來減少重復,然后以使用Java 8的特征模式示例實現為結尾。

假設您正在開發留言板軟件,并且已將以下內容標識為數據模型:“主題”,“評論”和“附件”。 主題具有標題,內容和作者。 評論包含內容和作者。 附件有標題和斑點。 一個主題可以有多個評論和附件。 一個評論也可以有多個評論,但沒有附件。

很快您就意識到,無論如何實現這三個模型,程序中都會有代碼重復。 例如,如果您想編寫一種向帖子添加新評論的方法,則需要編寫一種用于評論主題的方法和一種用于評論評論的方法。 編寫一種通過打印出討論樹來總結討論的方法,必須考慮到節點可以是主題,評論或附件。

自Java于20年前問世以來,面向對象的編程一直是該語言的骨肉,但是在此期間,其他語言也嘗試使用其他工具來組織程序的結構。 我們在Speedment Open Source中使用的一種這樣的工具稱為“特質”。 特性是一種“微接口”,它描述了類設計的某些特征,可以在整個系統的許多不同組件中找到它們。 通過引用特征而不是實現類本身,可以使系統保持解耦和模塊化。

讓我們看一下這將如何改變帶有留言板的示例。

現在,每個實體的不同特征已分為不同的接口。 很好 由于Java允許我們每個類具有多個接口,因此在編寫業務邏輯時可以直接引用這些接口。 實際上,完全不必公開這些類!

在其他編程語言(例如Scala,PHP,Groovy等)中存在很多特性。 據我所知,關于什么被視為不同語言之間的特征尚無共識。 在有關特征的Wikipedia頁面上 ,它說:

“特質既提供了一組實現類行為的方法,又要求類實現了一組參數化所提供行為的方法”

以下特性被命名為特征特有的:

  • 特征可以組合(對稱和)
  • 特質可以被覆蓋(不對稱總和)
  • 特質可以擴展(別名)
  • 特質可以排除(排除)

從Java 8開始,您實際上可以使用接口滿足大多數這些條件。 例如,您可以使用滿足對稱和標準的and(&)運算符將未知類型的實現類強制轉換為特征并集。 這里描述了一個很好的例子。 通過創建新接口并使用默認實現,您可以覆蓋某些方法來滿足不對稱求和條件。 別名可以以類似方式創建。 唯一的問題是排除。 當前,java無法從繼承中刪除方法,因此無法防止子類訪問特征中定義的方法。

如果返回到留言板示例,則可能需要一個示例,該示例要求實現類具有getComments方法,但是有關在注釋上添加,刪除和流式傳輸的所有其他邏輯都可以放在接口中。

public interface HasComments<R extends HasComments<R>> {// one method that parameterize the provided behaviourList<Comment> getComments();// two methods that implement the behaviourdefault R add(Comment comment) {getComments().add(comment);return (R) this;}default R remove(Comment comment) {getComments().remove(comment);return (R) this;} }

如果我們有一個對象,并且想將其轉換為HasComments和HasContent的對稱和,則可以使用and(&)運算符來實現:

final Object obj = ...; Optional.of(obj).map(o -> (HasComments<?> & HasContent<?>) o).ifPresent(sum -> {/* do something */});

這就是這一次!

PS:如果您想有關特質的概念,我真的建議您閱讀N.Sch?rli等人于2003年發表的《 特征:行為的可組合單位》 。

翻譯自: https://www.javacodegeeks.com/2016/02/definition-trait-pattern-java.html

總結

以上是生活随笔為你收集整理的Java中特质模式的定义的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。