java8 mixins “虚拟字段模式”实现“面向组合编程”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java8 mixins “虚拟字段模式”实现“面向组合编程”相关的知识,希望对你有一定的参考价值。

DCI(Data Context Interaction) 面向组合编程,一直是个比较高冷的概念。最近想实践下,发现了一篇不错的文章,翻译一下。

先介绍下背景:

JAVA语言是单继承的,所以实现“组合”总是比较绕的。总结下几种实现方式:

  1. 实现多接口,具体的行为和状态通过代理实现。

  2. AOP/动态代理/其他字节码织入

  3. JVM平台下的其他语言特性,例如scala的Trait,Ruby的mixin

  4. 特定框架Apache Zest



java8 对接口做了语法上的增强来模拟mixin. 但是不能很好的处理状态的继承。总的来说还是上面第一种方案类似。不过省去了很多代理方法的转发。


翻译:我把这个称为"虚拟字段模式"(Virtual Field Pattern),这些类提供了get,set方法,并最终合并到一起。像这样的带状态的混入,我也是刚有一些概要的想法,不知道有没有其他更官方的最佳实践,在我看来可以使用防御性方法实现代理:

 interface Peeker<T {
     T peek();
     T take();
     // maybe some other methods...
 }
 
 interface PeekerView<T extends Peeker<T {
     Peeker<T getPeeker();
     
     T peek() default { return getPeeker().peek(); }
     T take() default { return getPeeker().take(); }
 }
 
 public class BagOTricks<T implements PeekerView<T, ListView<T, SupplierView<T {
     private List<T underlying = ...
     private Peeker<T peeker = new ListPeeker<T(underlying);
     private Supplier<Optional<T supplier = new ListSupplier<T(underlying);
 
     @Override
     public Peeker<T getPeeker() {
         return peeker;
     }
 
     @Override
     public List<T getList() {
         return underlying;
     }
 
     @Override
     public Supplier<Optional<T getOptionalSupplier() {
         return supplier;
     }
 }


本文出自 “ThinkDifferently” 博客,转载请与作者联系!

以上是关于java8 mixins “虚拟字段模式”实现“面向组合编程”的主要内容,如果未能解决你的问题,请参考以下文章

scss sass general mixins响应字体面占位符

RESTful框架中的Mixin中的五个类视图

如何向 ES6 javascript 类添加 mixins?

Mixin实现组件功能的复用 全局配置Mixin

Less的!important关键字

什么是Mixin