View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.text;
18  
19  import java.util.function.Supplier;
20  
21  /**
22   * Duplicates the functionality of {@link Supplier}.
23   * <p>
24   * Defines a class as a <em>builder</em> following the Builder design pattern. Builders are capable of creating and configuring objects or results that normally
25   * take multiple steps to construct or are very complex to derive.
26   * </p>
27   * <p>
28   * The builder interface defines a single method, {@link #get()}, that classes must implement. The result of this method should be the final configured object
29   * or result after all building operations are performed.
30   * </p>
31   * <p>
32   * It is a recommended practice that the methods supplied to configure the object or result being built return a reference to {@code this} so that method calls
33   * can be chained together.
34   * </p>
35   *
36   * <p>
37   * Example Builder:
38   * </p>
39   *
40   * <pre>
41   * <code>
42   * class FontBuilder implements Builder&lt;Font&gt; {
43   *     private Font font;
44   *
45   *     public FontBuilder(String fontName) {
46   *         this.font = new Font(fontName, Font.PLAIN, 12);
47   *     }
48   *
49   *     public FontBuilder bold() {
50   *         this.font = this.font.deriveFont(Font.BOLD);
51   *         return this; // Reference returned so calls can be chained
52   *     }
53   *
54   *     public FontBuilder size(float pointSize) {
55   *         this.font = this.font.deriveFont(pointSize);
56   *         return this; // Reference returned so calls can be chained
57   *     }
58   *
59   *     // Other Font construction methods
60   *
61   *     public Font build() {
62   *         return this.font;
63   *     }
64   * }
65   * </code>
66   * </pre>
67   *
68   * Example Builder Usage:
69   *
70   * <pre>
71   * <code>
72   * Font bold14ptSansSerifFont = new FontBuilder(Font.SANS_SERIF)
73   *      .bold()
74   *      .size(14.0f)
75   *      .get();
76   * </code>
77   * </pre>
78   *
79   *
80   * @param <T> the type of object that the builder will construct or compute.
81   * @since 1.0
82   * @see Supplier
83   * @deprecated Use :@link Supplier}.
84   */
85  @Deprecated
86  public interface Builder<T> extends Supplier<T> {
87  
88      /**
89       * Returns a reference to the object being constructed or result being calculated by the builder.
90       *
91       * @return The object constructed or result calculated by the builder.
92       */
93      T build();
94  
95  }