码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-01-24 19:55:04      阅读:275      评论:0      收藏:0      [点我收藏+]

标签:java   ddd   dci   java8   mixin   

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 “虚拟字段模式”实现“面向组合编程”

标签:java   ddd   dci   java8   mixin   

原文地址:http://martinfowlerfan.blog.51cto.com/1561330/1737984

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!