在Java8中包装设计模式
生活随笔
收集整理的這篇文章主要介紹了
在Java8中包装设计模式
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
環(huán)繞模式未在GOF書中列出,但對(duì)于以下問題非常有用:
- 循環(huán)構(gòu)造,例如執(zhí)行while / while / for循環(huán)
- 秒表周圍的一些代碼。
- 用運(yùn)行時(shí)異常包裝檢查的異常
- 初始化和清理,例如創(chuàng)建/銷毀線程池或打開/關(guān)閉文件等
- 將上下文信息添加到線程,例如請(qǐng)求上下文信息以記錄或傳遞安全上下文等
Java需要大量的管道代碼來完成這些簡單的事情。 Java8添加了對(duì)lamdba的支持,并且可以解決此類問題。
可以將Lambda行為作為參數(shù)傳遞給任何函數(shù),如果要解決上述問題,這是非常強(qiáng)大的事情。
環(huán)繞
環(huán)繞功能的模板如下所示
- 預(yù)編碼
- 實(shí)際行為
- 郵編
WrapAround for循環(huán)
@FunctionalInterfacepublic interface CodeBlock {void execute();}@FunctionalInterfacepublic interface Condition {boolean test();}public static void loop(Condition condition, CodeBlock codeBlock) {while (condition.test()) {codeBlock.execute();}}上面的代碼非常簡單,它具有2個(gè)功能接口,一個(gè)用于條件,另一個(gè)用于執(zhí)行代碼塊,并且這2個(gè)行為使用lambda傳遞給循環(huán)函數(shù)。
這使我們可以引入新的構(gòu)造。
讓我們看一些更多的例子
WrapAround時(shí)間/秒表
@FunctionalInterfacepublic interface CodeBlock {void execute();}public static void time(String name, CodeBlock codeBlock) {long start = System.currentTimeMillis();codeBlock.execute();long total = System.currentTimeMillis() - start;System.out.println(name + " took " + total + " ms");}WrapAround可關(guān)閉/異常
@FunctionalInterfacepublic interface AutoCodeBlock {void execute(AutoCloseable closeable) throws IOException;}@FunctionalInterfacepublic interface ExceptionBlock {void execute() throws Exception;}public static void withAutoClose(AutoCloseable resource, AutoCodeBlock codeBlock) throws Exception {try (AutoCloseable c = resource) {codeBlock.execute(c);}}public static void wrapWithRuntimeException(ExceptionBlock codeBlock) {try {codeBlock.execute();} catch (Exception e) {throw new RuntimeException(e);}}Java 8具有大量可以使代碼簡潔的功能,而我僅使用了一個(gè)功能實(shí)現(xiàn)真正有用的東西。
- 博客中使用的代碼可在@github獲得
翻譯自: https://www.javacodegeeks.com/2015/10/wrap-around-design-pattern-in-java8.html
總結(jié)
以上是生活随笔為你收集整理的在Java8中包装设计模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 硬盘安装linux系统安装教程(硬盘 安
- 下一篇: ddos现在还有用吗(ddos关闭后有效