在Java8中包装设计模式

环绕模式未在GOF书中列出,但对于以下问题非常有用:

  • 循环构造,例如执行while / while / for循环
  • 秒表周围的一些代码。
  • 用运行时异常包装检查的异常
  • 初始化和清理,例如创建/销毁线程池或打开/关闭文件等
  • 将上下文信息添加到线程,例如请求上下文信息以记录或传递安全上下文等

Java需要大量的管道代码来完成这些简单的事情。 Java8添加了对lamdba的支持,并且可以解决此类问题。

可以将Lambda行为作为参数传递给任何函数,如果要解决上述问题,这是非常强大的事情。

环绕

环绕功能的模板如下所示

  • 预编码
  • 实际行为
  • 邮编
WrapAround for循环
@FunctionalInterface
    public interface CodeBlock {
        void execute();
    }

    @FunctionalInterface
    public interface Condition {
        boolean test();
    }

    public static void loop(Condition condition, CodeBlock codeBlock) {
        while (condition.test()) {
            codeBlock.execute();
        }
    }

上面的代码非常简单,它具有2个功能接口,一个用于条件,另一个用于执行代码块,并且这2个行为使用lambda传递给循环函数。

这使我们可以引入新的构造。

让我们看一些更多的例子

WrapAround时间/秒表
@FunctionalInterface
    public 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可关闭/异常
@FunctionalInterface
    public interface AutoCodeBlock {
        void execute(AutoCloseable closeable) throws IOException;
    }

    @FunctionalInterface
    public 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具有大量可以使代码简洁的功能,而我仅使用了一个功能实现真正有用的东西。

翻译自: https://www.javacodegeeks.com/2015/10/wrap-around-design-pattern-in-java8.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值