Fluent interface 简介
来源:互联网 发布:淘宝一件代发如何发货 编辑:程序博客网 时间:2024/05/22 08:03
在软件工程中,Fluent Interface(由埃里克·埃文斯和马丁·福勒(Martin Fowler)首创)是构建面向对象的API的一种方法,其中源代码的可读性接近普通书面散文。
流畅的接口通常通过使用方法级联(具体地方法链接)来中继后续调用的指令上下文来实现(但是流畅的接口不仅仅需要方法链接[1])。 一般来说,上下文是
流畅的接口通常通过使用方法级联(具体地方法链接)来中继后续调用的指令上下文来实现(但是流畅的接口不仅仅需要方法链接[1])。 一般来说,上下文是
- 通过调用方法的返回值定义
- 自我参照,其中新的上下文等同于最后的语境
- 通过返回一个空白上下文来终止。
“Fluent Interface”这个术语是在2005年底创造出来的,尽管这种整体界面风格可以追溯到20世纪70年代的Smalltalk的方法级联发明,也是20世纪80年代的很多例子。 一个常见的例子是C ++中的iostream库,它使用<<或>>操作符来传递消息,将多个数据发送到同一对象,并允许“操纵器”用于其他方法调用。 其他早期的例子包括Garnet系统(从1988年在Lisp)和Amulet系统(从1994年在C ++),它使用这种风格进行对象创建和属性分配。
JavaScript 例子:
有很多JavaScript库的例子使用了一些这样的变体:jQuery可能是最知名的。 通常,流利的构建器用于实现“数据库查询”,例如在https://github.com/Medium/dynamite中:
// getting an item from a tableclient.getItem('user-table') .setHashKey('userId', 'userA') .setRangeKey('column', '@') .execute() .then(function(data) { // data.result: the resulting object })在JavaScript中这样做的一个简单方法是使用原型继承和“this”:
// example from http://schier.co/post/method-chaining-in-javascript// define the classvar Kitten = function() { this.name = 'Garfield'; this.color = 'brown'; this.gender = 'male';};Kitten.prototype.setName = function(name) { this.name = name; return this;};Kitten.prototype.setColor = function(color) { this.color = color; return this;};Kitten.prototype.setGender = function(gender) { this.gender = gender; return this;};Kitten.prototype.save = function() { console.log( 'saving ' + this.name + ', the ' + this.color + ' ' + this.gender + ' kitten...' ); // save to database here... return this;};// use itnew Kitten() .setName('Bob') .setColor('black') .setGender('male') .save();
Java
The jOOQ 项目把 SQL 的调用, 做成Fluent API的风格:
Author author = AUTHOR.as("author");create.selectFrom(author) .where(exists(selectOne() .from(BOOK) .where(BOOK.STATUS.eq(BOOK_STATUS.SOLD_OUT)) .and(BOOK.AUTHOR_ID.eq(author.ID))));
阅读全文
0 0
- Fluent interface 简介
- Fluent Interface-感知
- Fluent Interface(流接口)
- Asp.net MVC FluentHTML and Fluent Interface
- Asp.net MVC FluentHTML and Fluent Interface
- Asp.net MVC FluentHTML and Fluent Interface
- Fluent NHibernate 系列(一)Fluent Nhibernate简介
- C#Interface简介
- C# interface 简介
- FEST-Reflect 1.2:基于Fluent Interface,简单化Java反照的类库
- 基于JDK动态代理实现的接口链式调用(Fluent Interface)工具
- Java Native Interface(JNI)简介
- Java Native Interface (JNI)简介
- Fluent NHibernate
- Fluent NHibernate
- Fluent UI
- fluent study
- ISP简介(ISP--Interface Segregation Principle)
- API接口测试用例设计
- SSH框架中Hibernate实现对数据的持久化
- How to install caffe in macOS 10.12.5
- AngularJS第五课(模块,动画,依赖注入)
- primeng使用步骤
- Fluent interface 简介
- C#实现桌面应用程序简单的计算器
- 关于C#的装箱和拆箱的简单测试例子
- java实现生产者与消费者
- Python基础,基本类型(整型,浮点数等)数据结构(List,dic(Map),Set,Tuple),控制语句(if,for,while,continue or break):来自学习资料
- HDU1166 敌兵布阵(树状数组)
- pdf与cad的转换
- 方法的按值传递
- DTcms(三)