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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

垂直和水平装饰

發布時間:2023/12/3 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 垂直和水平装饰 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

裝飾器模式是在不更改其接口的情況下向對象添加功能的最佳方法之一。 我經常使用可組合裝飾器,并且總是會問自己在功能列表必須可配置時如何正確設計它們。 我不確定我的答案是否正確,但是這里有一些值得深思的地方。

公寓(1960),比利·懷爾德(Billy Wilder)

假設我有一個數字列表:

interface Numbers {Iterable<Integer> iterate(); }

現在,我想創建一個僅包含奇數,唯一,正數和排序數的列表。 第一種方法是垂直的 (我剛剛將其命名):

Numbers numbers = new Sorted(new Unique(new Odds(new Positive(new ArrayNumbers(new Integer[] {-1, 78, 4, -34, 98, 4,})))) );

第二種方法是水平的 (同樣,我做了一個名字):

Numbers numbers = new Modified(new ArrayNumbers(new Integer[] {-1, 78, 4, -34, 98, 4,}),new Diff[] {new Positive(),new Odds(),new Unique(),new Sorted(),} );

看到不同? 第一種方法“垂直”修飾ArrayNumbers ,通過可組合修飾符Positive , Odds , Unique和Sorted添加功能。

第二種方法引入了新的接口Diff ,該接口通過Positive , Odds , Unique和Sorted實例實現了迭代數字的核心功能:

interface Diff {Iterable<Integer> apply(Iterable<Integer> origin); }

對于numbers用戶,這兩種方法是相同的。 區別僅在于設計。 哪個更好?何時? 似乎垂直裝飾更容易實現,并且更適合于只暴露一些方法的較小對象。

根據我的經驗,我總是傾向于從垂直裝飾開始,因為它易于實現,但是隨著裝飾器數量的增加,最終會遷移到水平裝飾。

翻譯自: https://www.javacodegeeks.com/2015/10/vertical-and-horizontal-decorating.html

總結

以上是生活随笔為你收集整理的垂直和水平装饰的全部內容,希望文章能夠幫你解決所遇到的問題。

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