<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ### 多態工廠 《設計模式》這本書強調指出,采用“工廠方法”模式的原因是可以從基本工廠中繼承出不同類型的工廠。 再次修改示例,使工廠方法位于單獨的類中: ```java // patterns/ShapeFactory3.java // Polymorphic factory methods import java.util.*; import java.util.function.*; import java.util.stream.*; import patterns.shapes.*; interface PolymorphicFactory { Shape create(); } class RandomShapes implements Supplier<Shape> { private final PolymorphicFactory[] factories; private Random rand = new Random(42); RandomShapes(PolymorphicFactory... factories){ this.factories = factories; } public Shape get() { return factories[ rand.nextInt(factories.length)].create(); } } public class ShapeFactory3 { public static void main(String[] args) { RandomShapes rs = new RandomShapes( Circle::new, Square::new, Triangle::new); Stream.generate(rs) .limit(6) .peek(Shape::draw) .peek(Shape::erase) .count(); } } ``` 輸出結果: ```java Triangle[0] draw Triangle[0] erase Circle[1] draw Circle[1] erase Circle[2] draw Circle[2] erase Triangle[3] draw Triangle[3] erase Circle[4] draw Circle[4] erase Square[5] draw Square[5] erase ``` **RandomShapes**實現了**Supplier \<Shape>**,因此可用于通過`Stream.generate()`創建**Stream**。 它的構造器采用**PolymorphicFactory**對象的可變參數列表。 變量參數列表以數組形式出現,因此列表是以數組形式在內部存儲的。`get()`方法隨機獲取此數組中一個對象的索引,并在結果上調用`create()`以產生新的**Shape**對象。 添加新類型的**Shape**時,**RandomShapes**構造器是唯一需要更改的地方。 請注意,此構造器需要**Supplier \<Shape>**。 我們傳遞給其**Shape**構造器的方法引用,該引用可滿足**Supplier \<Shape>**約定,因為Java 8支持結構一致性。 鑒于**ShapeFactory2.java**可能會拋出異常,使用此方法則沒有任何異常——它在編譯時完全確定。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看