<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                > 簡單工廠提供一個創建對象實例的功能,無須關心其具體實現。被創建的實例可以是接口、抽象類,也可以是具體的類 簡單工廠的結構如下: ![簡單工廠的結構示意圖](https://img.kancloud.cn/24/43/244341ba6eecc0db9f80bafc79c3d7ea_846x352.png) 從上述結構可以看出,把對API的實例向客戶端隱藏了,客戶端在調用的時候無需關注具體實現類是哪個,只需要調用工廠創建出一個實例,然后發起調用即可。上述結構整理下如下圖 在Java里面,通常情況下是用來創造接口的,但是也可以創造抽象類或普通的類。下圖是簡單工廠的調用順序 ![簡單工廠的調用順序](https://img.kancloud.cn/c7/ba/c7ba647dae73bd2a68daf46d65a7f013_832x344.png) ## 簡單工廠的本質 簡單工廠的本質在于選擇,而非實現。 所以實現簡單工廠的難點就在于如何選擇,我們可以采用參數傳遞、配置文件等等方式來嘗試實現。 ## 何時選用簡單工廠 - 如果想要完全封裝隔離具體實現,讓外部只能通過接口來操作封裝體,那么可以選擇簡單工廠。 - 如果想要把對外創建對象的職責集中管理和控制,可以選擇簡單工廠。 代碼示例: 新增對象類 ``` package com.mk.designDemo.designs.factory.model; import lombok.AllArgsConstructor; import lombok.Data; @Data @AllArgsConstructor public class Car { /** * 品牌 */ private String brand; /** * 名稱 */ private String name; /** * 生產廠家 */ private String manufacturer; /** * 產地 */ private String origin; } package com.mk.designDemo.designs.factory.model; public class BMWCar extends Car { public BMWCar(String name) { super("BMW", name, "德國BMW", "德國代工廠"); } } package com.mk.designDemo.designs.factory.model; public class BENZCar extends Car { public BENZCar(String name) { super("BENZ", name, "德國Benz", "德國代工廠"); } } ``` 新增API和實現類 ``` package com.mk.designDemo.designs.factory; import com.mk.designDemo.designs.factory.model.Car; public interface CarAPI { Car getCar(String carName); } package com.mk.designDemo.designs.factory.impl; import com.mk.designDemo.designs.factory.CarAPI; import com.mk.designDemo.designs.factory.model.BMWCar; import com.mk.designDemo.designs.factory.model.Car; public class BMWCarAPI implements CarAPI { @Override public Car getCar(String name) { return new BMWCar(name); } } package com.mk.designDemo.designs.factory.impl; import com.mk.designDemo.designs.factory.Brand; import com.mk.designDemo.designs.factory.CarAPI; import com.mk.designDemo.designs.factory.model.BENZCar; import com.mk.designDemo.designs.factory.model.Car; @Brand("BENZ") public class BenzCarAPI implements CarAPI { @Override public Car getCar(String name) { return new BENZCar(name); } } ``` 新增測試類 ``` package com.mk.designDemo.factory; import com.mk.designDemo.designs.factory.CarAPI; import com.mk.designDemo.designs.factory.MyCarFactory; import com.mk.designDemo.designs.factory.model.Car; import org.junit.Test; public class CarFactoryTest { @Test public void getCar() throws Exception { CarAPI carAPI = MyCarFactory.getCarApi("BMW"); Car car = carAPI.getCar("2019款新寶馬3系"); System.out.println(car.toString()); } } ``` 測試結果: ![簡單工廠測試結果](https://img.kancloud.cn/8d/80/8d800ba7cd53d9d04e30bd7bf5f127af_986x225.png) ```文中內容摘自《研磨設計模式》```
                  <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>

                              哎呀哎呀视频在线观看