【一】模式定义

在软件工程中,流接口是指实现一种面向对象的、能提高代码可读性的 API 的方法,其目的就是可以编写具有自然语言一样可读性的代码,我们对这种代码编写方式还有一个通俗的称呼 —— 方法链。

【二】UML 类图

【三】示例代码

Sql.php

namespace DesignPatterns\Structural\FluentInterface;

/**

* SQL 类

*/

class Sql

{

/**

* @var array

*/

protected $fields = array();

/**

* @var array

*/

protected $from = array();

/**

* @var array

*/

protected $where = array();

/**

* 添加 select 字段

*

* @param array $fields

*

* @return SQL

*/

public function select(array $fields = array())

{

$this->fields = $fields;

return $this;

}

/**

* 添加 FROM 子句

*

* @param string $table

* @param string $alias

*

* @return SQL

*/

public function from($table, $alias)

{

$this->from[] = $table . ' AS ' . $alias;

return $this;

}

/**

* 添加 WHERE 条件

*

* @param string $condition

*

* @return SQL

*/

public function where($condition)

{

$this->where[] = $condition;

return $this;

}

/**

* 生成查询语句

*

* @return string

*/

public function getQuery()

{

return 'SELECT ' . implode(',', $this->fields)

. ' FROM ' . implode(',', $this->from)

. ' WHERE ' . implode(' AND ', $this->where);

}

}

【四】测试代码

Tests/FluentInterfaceTest.php

namespace DesignPatterns\Structural\FluentInterface\Tests;

use DesignPatterns\Structural\FluentInterface\Sql;

/**

* FluentInterfaceTest 测试流接口SQL

*/

class FluentInterfaceTest extends \PHPUnit_Framework_TestCase

{

public function testBuildSQL()

{

$instance = new Sql();

$query = $instance->select(array('foo', 'bar'))

->from('foobar', 'f')

->where('f.bar = ?')

->getQuery();

$this->assertEquals('SELECT foo,bar FROM foobar AS f WHERE f.bar = ?', $query);

}

}

php接口模式,PHP设计模式 - 流接口模式相关推荐

  1. python工厂模式 django_python设计模式-工厂方法模式

    题目:假设你有一个 pizza 店,功能包括下订单.做 pizza,你的代码会如何写呢? def order_pizza(): pizza = Pizza() pizza.prepare() pizz ...

  2. Java创新型模式_java设计模式--创建型模式(一)

    2016-04-24 10:10:34 创建型模式:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式 注意:工厂模式可以分为三类: 1)简单工厂模式(Simple Factory) 2)工厂 ...

  3. python 命令模式_python 设计模式之命令模式

    命令模式介绍: 在面向对象编程中,命令模式是概括所有方法信息的设计模式. 此模式对象包涵方法名,及其相关参数值. 命令模式是一个分类的观察者设计模式,在命令模式下,对象被概括为一个命令表单,此表单包涵 ...

  4. 工厂模式 java_JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)

    在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一 ...

  5. java web简单工厂模式_JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)

    在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一 ...

  6. 访问者模式 java_java设计模式之访问者模式

    写这篇文章之前,我也看了十几篇网络大牛写的访问者设计模式的文章,都说这个访问者模式是最复杂的一个,但是我觉得跟其他的设计模式并没有太多的不同,因此自己整理了一下,相信大多数人都能看懂. 一.认识访问者 ...

  7. 组合模式 桥接模式 java_java设计模式5.组合模式、门面模式、享元模式、桥接模式...

    组合模式 在面向对象的语言中,树结构有着巨大的威力,一个基于继承的类型的等级结构便是一个数结构,一个基于合成的对象结构也是一个数结构.组合模式将部分与整体的关系用树结构表示出来,使得客户端把一个个单独 ...

  8. 过滤器用到了java哪个模式_设计模式之过滤器模式——Java语言描述

    过滤器模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来 实现 创建一个Person对象.Criteria 接口和实现了该接口的实体类,来过滤 Person 对象的列 ...

  9. 抽象工厂模式_设计模式——抽象工厂模式

    阅读目录 使用频率:★★★★★ 一.什么是抽象工厂模式 二.补充说明 三.角色 四.例子 使用频率:★★★★★ 一.什么是抽象工厂模式 就是对一组具有相同主题的工厂进行封装(维基百科解释的很到位): ...

最新文章

  1. 如何在SAP Cloud Platform上进行第一个integration flow开发
  2. jsp页面格式化时间或数字
  3. 安卓fragment笔记
  4. Java中集合retainall_Collection中的之retainAll()方法的理解
  5. 如何在excel中单独冻结多行或多列
  6. android 释放摄像头,android – 为什么Camera需要在onPause()而不是onstop()方法中释放?...
  7. 【Unity】游戏音效制作工具
  8. C# 复数类 Complex
  9. 将代码提交到github上
  10. Excel饼图中既显示百分比
  11. 更改aspx页面编码格式
  12. 用户登录验证程序的实现
  13. python实现视频ai换脸_超简单使用Python换脸实例
  14. 应用案例 | 12年雪佛兰科鲁兹网络故障
  15. 敏捷项目管理21天学习计划--精益画布
  16. linux运维培训时间,linux运维培训班跟自学相比那个好?
  17. eNSP:实现不同网段主机之间的通信(直连路由)
  18. iPhone和MacOS同步复制粘贴功能导致iPhone死机问题
  19. vue 中 ckeditor5 如何隐藏工具条
  20. canon ip1180清零教程2780

热门文章

  1. 模型算法_详解SVM模型之SMO算法
  2. 中柏平板触摸驱动_要成绩也要玩乐,聊聊学生买平板那些事儿
  3. python socket 域名_python用socket发送http请求
  4. JS — 数组去重(4种方法)
  5. C++习题 对象数组求最大值
  6. C#中执行Dos命令
  7. C#实现万年历(农历、节气、节日、星座、星宿、属相、生肖、闰年月、时辰)
  8. hdu2112最短路径
  9. 关于placement new
  10. 十大最赚钱行业,可惜呀,没我们什么事。