上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
10.1 一个二维的布局类库
我们将创建一个用于构建和渲染二维布局元素的类库,以此作为本章的示例。每个元素表示一个用文本填充的长方形。为方便起见,类库将提供名为“elem”的工厂方法,从传入的数据构造新的元素。例如,可以用下面这个签名的工厂方法创建一个包含字符串的布局元素:
就像你看到的,我们用一个名为Element的类型来对元素建模。可以对一个元素调用above或beside,传入另一个元素,来获取一个将两个元素结合在一起的新元素。例如,下面这个表达式将创建一个由两列组成的更大的元素,每一列的高度都为2:
打印上述表达式的结果将得到:
布局元素很好地展示了这样一个系统:在这个系统中,对象可以通过组合操作符的帮助由简单的部件构建出来。本章将定义那些可以从数组、线和矩形构造出元素对象的类,这些基础的元素对象是我们说的简单的部件,我们还会定义组合操作符above和beside。这样的组合操作符通常也被称作组合子(combinator),因为它们将某个领域内的元素组合成新的元素。
用组合子来思考通常是一个设计类库的好办法:对于某个特定的应用领域中对象,它们有哪些基本的构造方式,这样的思考是很有意义的。简单的对象如何构造出更有趣的对象?如何将组合子有机地结合在一起?最通用的组合有哪些?它们是否满足某种有趣的法则?如果对这些问题你都有很好的答案,那么你的类库设计就走在正轨上。