java系统架构师有的特质_Java中特质模式的定义
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系統架構師有的特質
總結
以上是生活随笔為你收集整理的java系统架构师有的特质_Java中特质模式的定义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2手安卓手机多少钱(2手安卓手机)
- 下一篇: linux编程语言排行榜(linux 编